DelphiXE3下的字串

2022-08-01 21:45:17 字數 1984 閱讀 2800

在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中 去...