delphi XE的字串處理

2022-06-05 03:27:06 字數 1055 閱讀 2219

最近用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編碼進行儲存。

DelphiXE下的字串變化

字串型別用於描述乙個單獨的書面的文字和符號。一 字元型別 delphi支援ansichar和widechar兩種基本的字元型別。ansichar型別變數使用單位元組來表示乙個字元,widechar使用兩個位元組來表示乙個字元。widechar和ansichar型別的變數之間不能相互賦值,例 varw...

DelphiXE3下的字串

在delphi中,我們常用string來宣告字串.procedure teststringfordelphi varstrname string nlenname integer begin strname 中國a nlenname length strname showmessage 字串 str...

字串處理 字串反轉

請原諒博主今天很閒,於是乎博主又開始更新微博了。這次要更新的問題是 編寫乙個函式,反轉乙個單詞的順序。例如 do or do not,there is no try.就要反轉成 try.no is there not,do or do 大家要認真看看這道題,這道題和大家想象的貌似有點不同。首先字串反...