delphi 字符串處理中的怪異現(xiàn)象與處理方式
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)文章
Delphi實(shí)現(xiàn)獲取磁盤(pán)空間大小的方法
這篇文章主要介紹了Delphi實(shí)現(xiàn)獲取磁盤(pán)空間大小的方法,是一個(gè)很實(shí)用的功能,需要的朋友可以參考下2014-07-07Delphi實(shí)現(xiàn)碰撞球體完整實(shí)例代碼
這篇文章主要介紹了Delphi實(shí)現(xiàn)碰撞球體完整實(shí)例代碼,通過(guò)該實(shí)例,讀者可以完整的了解一個(gè)Delphi項(xiàng)目的創(chuàng)建過(guò)程,加深對(duì)Delphi運(yùn)行原理的了解,需要的朋友可以參考下2014-07-07Delphi2007編譯的程序在Win7下圖標(biāo)模糊的解決辦法
這篇文章主要介紹了Delphi2007編譯的程序在Win7下圖標(biāo)模糊的解決辦法,需要的朋友可以參考下2014-08-08解決delphi TAdoQuery組件的close方法導(dǎo)致”列名無(wú)效“錯(cuò)誤的問(wèn)題
今天小編就為大家分享一篇解決delphi TAdoQuery組件的close方法導(dǎo)致”列名無(wú)效“錯(cuò)誤的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02delphi mysql adbquery數(shù)據(jù)提供程序或其他服務(wù)返回 E_FAIL 狀態(tài)
這篇文章主要介紹了delphi mysql adbquery數(shù)據(jù)提供程序或其他服務(wù)返回 E_FAIL 狀態(tài)的解決方法2013-11-11截取指定符號(hào)之間的字符串(隨機(jī)讀取)delphi實(shí)例代碼
這篇文章主要介紹了截取指定符號(hào)之間的字符串(隨機(jī)讀取)delphi實(shí)例代碼,有需要的朋友可以參考一下2013-12-12Delphi 用DLL實(shí)現(xiàn)插件的簡(jiǎn)單實(shí)例
這篇文章主要介紹了Delphi 用DLL實(shí)現(xiàn)插件的簡(jiǎn)單實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家,這里提供實(shí)例幫助大家掌握這部分內(nèi)容,需要的朋友可以參考下2017-09-09