1. 程式人生 > 程式設計 >delphi 字串處理中的怪異現象與處理方式

delphi 字串處理中的怪異現象與處理方式

1, 怪異現象:字串相加操作不正常!

delphi 字串處理中的怪異現象與處理方式

以上程式碼,明顯輸出字串應含有後綴“.jpg”,但實際輸出卻不含字尾(如下),字串加法操作似乎不起作用了!

delphi 字串處理中的怪異現象與處理方式

採用showMessage進行輸出,看看結果如何?

delphi 字串處理中的怪異現象與處理方式

結果仍是不顯示字串字尾,但可以看到字串偏左顯示,似乎後面還有很多不可見字元。

2,怪異原因:字串中含有\0,即字串終止符

以上現象已經看出,字串加法失效的原因可能是含有某些不可見字元,那到底是什麼字元呢?

回到這些字串產生的源頭,即下面由位元組陣列轉換成字串函式:

delphi 字串處理中的怪異現象與處理方式

顯然,此函式未考慮len長度以內可能含有的\0字元,如果buffer中len長度以內含有\0字元,那麼這些\0字元也會被複制進result字串中,造成後續字串加法“失效”。

3,解決方案:修改函式

將函式修改如下,判斷逐位元組判斷buffer,遇到\0就返回,這樣轉換的字串就不含\0了。問題解決。

//位元組轉換為字串 $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不再複製!
 Move(buffer[offset-1+i],str[1+i],1);//注意,這裡是從str[1]開始複製的
 end;
 //Move(buffer[offset-1],str[1],len);//注意,這裡是從str[1]開始複製的
 //ShowMessage (str);

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

以上這篇delphi 字串處理中的怪異現象與處理方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。