欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

delphi 字符串處理中的怪異現(xiàn)象與處理方式

 更新時(shí)間:2020年02月15日 14:42:22   作者:jack kwok  
今天小編就為大家分享一篇delphi 字符串處理中的怪異現(xiàn)象與處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

1, 怪異現(xiàn)象:字符串相加操作不正常!

以上代碼,明顯輸出字符串應(yīng)含有后綴“.jpg”,但實(shí)際輸出卻不含后綴(如下),字符串加法操作似乎不起作用了!

采用showMessage進(jìn)行輸出,看看結(jié)果如何?

結(jié)果仍是不顯示字符串后綴,但可以看到字符串偏左顯示,似乎后面還有很多不可見(jiàn)字符。

2,怪異原因:字符串中含有\(zhòng)0,即字符串終止符

以上現(xiàn)象已經(jīng)看出,字符串加法失效的原因可能是含有某些不可見(jiàn)字符,那到底是什么字符呢?

回到這些字符串產(chǎn)生的源頭,即下面由字節(jié)數(shù)組轉(zhuǎn)換成字符串函數(shù):

顯然,此函數(shù)未考慮len長(zhǎng)度以內(nèi)可能含有的\0字符,如果buffer中l(wèi)en長(zhǎng)度以內(nèi)含有\(zhòng)0字符,那么這些\0字符也會(huì)被復(fù)制進(jìn)result字符串中,造成后續(xù)字符串加法“失效”。

3,解決方案:修改函數(shù)

將函數(shù)修改如下,判斷逐字節(jié)判斷buffer,遇到\0就返回,這樣轉(zhuǎn)換的字符串就不含\0了。問(wèn)題解決。

//字節(jié)轉(zhuǎn)換為字符串 $D4 $C1--> '粵'
function BytesToString(buffer: Array of byte; offset:integer; len: integer): string;
var
 str: string;
 i : Integer;
begin
 SetLength(str, len);
 for i:=0 to len-1 do
 begin
 if buffer[offset-1+i]=0 then break; //遇到ASCII 0不再?gòu)?fù)制!
 Move(buffer[offset-1+i], str[1+i], 1);//注意,這里是從str[1]開(kāi)始復(fù)制的
 end;
 //Move(buffer[offset-1], str[1], len);//注意,這里是從str[1]開(kāi)始復(fù)制的
 //ShowMessage (str);

 SetLength(str, i);
 result := str;
end;

以上這篇delphi 字符串處理中的怪異現(xiàn)象與處理方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論