在delphi中,我們常用string來宣告字串.
procedure
teststringfordelphi;
varstrname: string;
nlenname: integer;
begin
strname := '中國a';
nlenname :=
length(strname);
showmessage('字串"' + strname +
'"長度為:' + inttostr(nlenname) +';第乙個字元是:' +
strname[1]);
end;
也就是說在delphi7中,string代表的是ansistring型別;length得到的是字串的位元組
長度,strname[1]得到的是字串的第乙個位元組,因為漢字占用兩個位元組,所以沒有顯示「中」這個字元
也就是說在delphixe3中,string代表的是widestring型別;length得到的是字串的字元
長度,strname[1]得到的是字串的第乙個
字元,想得到字串的位元組長度,可使用system.sysutils.bytelength(strname)函式。
我們來看一下bytelength的實現:
function bytelength(const s: string):
integer;
begin
result := length(s) * sizeof(char);
end;
發現了什麼?計算結果是:字元長度*sizeof(char),而sizeof(char)=2,因為char型別在delphixe3下代表的是widechar,占用兩個位元組的空間。
//將字串寫入流
procedure
writestringtostream(astream: tstream; const astr: string);
varnbytecnt: integer;
begin
nbytecnt := bytelength(astr);
astream.writebuffer(nbytecnt,
sizeof(nbytecnt));
astream.writebuffer(astr[1], nbytecnt);
end;
// 從流中讀取字串
procedure readstringfromstream(astream:
tstream; var astr: string);
varnbytecnt,
ncharcnt:
integer
;begin
astream.readbuffer(nbytecnt,
sizeof(nbytecnt));
ncharcnt := nbytecnt div 2;
setlength(astr, ncharcnt);
if nbytecnt > 0 then
astream.readbuffer(astr[1],
nbytecnt);
end;
procedure
getbytesfromstring(value: string);
varstrbuf: tbytes;
begin
strbuf := system.sysutils.tencoding.utf8.getbytes(value);
end;
procedure getstringfrombytes(value:
tbytes);
varstr:
string;
begin
str:= system.sysutils.tencoding.utf8.getstring(value);
end;
DelphiXE下的字串變化
字串型別用於描述乙個單獨的書面的文字和符號。一 字元型別 delphi支援ansichar和widechar兩種基本的字元型別。ansichar型別變數使用單位元組來表示乙個字元,widechar使用兩個位元組來表示乙個字元。widechar和ansichar型別的變數之間不能相互賦值,例 varw...
delphi XE的字串處理
最近用delphi xe做了個東西,因為以前一直使用delphi 7做開發,delphi 7 到delphi xe有了很大的變化,最大的變化就是對unicode的支援,所以剛開始使用delphi xe時還有些不太習慣,尤其在字串處理的時候。delphi xe 增加了unicodestring 型別,...
複製字串3
author 劉慧豔 created edition v1.0 describe 複製字串str1,儲存到str2中 在字串str2後面增加符號 comment 將str1和str2接起來存放到str3中 將str1中的空格去除,仍儲存在str1中 將str1和str2接起來,仍存放在str1中 去...