close
文章出處

最近用delphi xe做了個東西,因為以前一直使用Delphi 7做開發,delphi 7 到delphi XE有了很大的變化,最大的變化就是對Unicode的支持,所以剛開始使用DELPHI XE時還有些不太習慣,尤其在字符串處理的時候。

DELPHI XE 增加了UnicodeString 類型,這在Delphi 7中是沒有的,默認的String字符串為UnicodeString,而String在Delphi 7中是AnsiString類型,在新版的DELPHI中,字符串的存儲格式也發生了變化:

在DELPHI7中,字符串的存儲格式是這樣子的:

【引用計數位(-8byte)】【字符串長度(-4byte)】【字符串內容】

這一結構在DELPHI2009時發生了變化,增加了代碼頁、元素長度兩部分內容:

【代碼頁(-12byte)】【元素長度(-10)】【引用計數位(-8byte)】【字符串長度(-4byte)】【字符串內容】

在新版本的DELPHI中,不論是UnicodeString類型還是AnsiString類型,都遵循上面結構,不同之處是元素長度部分,UnicodeString類型元素長度部分為2,而AnsiString類型元素長度部分為1,也就是說,Unicode字符串中每個字符占用兩個字節的位置,而AnsiString占用一個字節的位置。

除了UnicodeString字符串類型外,在新版本的Delphi中,還增加了RawByteString字符串類型,RawByteString字符串類型有什么特殊的用途呢?在查看DELPHI源碼時,我們可以看到其定義:
RawByteString = type AnsiString($FFFF);
由此可見,可以認為RawByteString類型是以AnsiString類型為基礎的,其特點是不管傳入的字符串的代碼頁是什么,RawByteString字符串會原封不動的保持傳入數據的原樣。這里說明一下:type AnsiString(【代碼頁】)可以定義不同代碼頁的字符集編碼,例如:
GbkString = type AnsiString(936);
就是定義了Gbk編碼的字符集,當我們為GbkString類型的變量傳入字符串時,其存儲格式就會按照GBK編碼進行存儲。

不含病毒。www.avast.com
arrow
arrow
    全站熱搜

    AutoPoster 發表在 痞客邦 留言(0) 人氣()