delphi基礎篇之資料型別之二 2 字串型別

2022-08-02 20:48:14 字數 2674 閱讀 5254

2.字串型別

2.1.shortstring

shortstring 又稱為短字串(相對的,ansistring、widestring、unicodestring 稱為長字串),其實質上是乙個編譯器內建的字元陣列,類似(不是等效)於以下型別:

type

shortstring = array[0..255] of ansichar;

其容納由 256 個 ansichar 組成的字串,但第乙個字元有特殊用途,所以shortstring 型別的字串長度不可超過 255byte。

shortstring 的第乙個位元組的值等於字串的實際長度。故而獲取 shortstring 字串實際長度的方法有 2 種:

一是利用標準函式 length();

二是直接利用第 1 個位元組的值。

例如:var

str;shortstring;

begin

str := 'abcdefg';

writeln(inttostr(integer(str[0]))); //顯示 7

writeln(inttostr(length(str))); //顯示 7

end.

2.2ansistring

ansistring 型別也被稱為長字串。此型別的字串由ascii 擴充套件字符集組成。ansistring 型別實質上是乙個指標型別,指向字串首個字元的位址,也就是第13個位元組(delphi2009以後)。利用標準函式 sizeof()可知此型別變數在記憶體中占用 4 個位元組。為了節約記憶體,delphi 將ansistring 字串的字串本身分配在堆中,而在棧中留下一指向字串的指標,這個指標就是 ansistring 型別的變數。使用字串索引時有兩點值得注意:索引應當從 1 開始。 12

3456

78910

1112

1314

1516

1718

1920

2122

2324

2526

2728

a803

0100

ffff

ffff

0f00

0000

4875

616e

674a

6163

6b79

4141

4142

4100

**頁字元寬度

引用次數

字串的字元數

字串實際內容

結束符9361-1

15hua

ngja

ckya

aaba

#0$03a8就是936,

查msdn 

936 - gb2312

每個字元所佔

的位元組數

(ansi為1

)對於常量字串,引用計數總是-1,delphi並未作出優化。當字串為變數時計數大於等於1。

3.widestring

widestring 與 ansistring 基本一樣,除以下幾點:

4.unicodestring

unicodestring 與 ansistring 基本相同,唯一的區別在於前者容納的字串由unicode 字符集中的字元組成。事實上 unicodestring 的出現更多是為了彌補 widestring在處理 unicode 編碼時的不足。在絕大多數場合,unicodestring 比 widestring 更適合。但編寫 com 程式時,只能選擇 widestring。注意對 unicodestring 字串進行索引時得到的也是某個字元的值。

5.string

string 為 delphi 的保留字,用作 unicodestring 型別的乙個別名。

6.ucs4string

usc4string 型別容納 usc4 字符集中的字元組成的字串。其宣告如下:

type

ucs4string = array of ucs4char;

此型別的字串基本不用。在筆者看來,此型別現時只有兩個用途:其一為方便delphi 在未來遷移時花費最小的代價,畢竟 ucs4 編碼是將來的趨勢;其二是用於各種編碼的字串的轉換,其它編碼的字串轉化至 ucs4string 不會有任何的資料丟失,故而此型別很適合作為字串轉換時的中間格式。

7.codepaged ansistring

從前面的敘述可知 ansistring 用於容納擴充套件 ascii 字符集字元形成的字串。事實上,這種說法並不精確。較為精確的說法是:ansistring 能夠容納所有編碼格式的字串,只要計算機上安裝了相應的字符集,但只有 ansistring 字串的編碼為本地擴充套件ascii 字符集時才能被正確顯示。

8.rawbytestring

rawbytestring 的原型為:

type

rawbytestring = type ansistring($ffff);

注意:$ffff 不代表現有的任何編碼方式。

使用 rawbytestring 時注意:作為函式引數時,rawbytestring 只能用作 const 或value 方式傳遞的引數,不可用於 var 方式傳遞。

9.nul 結尾字串

delphi 不存在 c 風格的 null 結尾的字串。作為替代,可以使用以下 2 種方法來模擬:

注意:使用字元陣列替代字串時應保證開啟了指令,此指令預設為開啟狀態。

python基礎篇之資料型別

python 中有四個非常常用的資料型別,分別是字串,列表,元組和字典。下面就來介紹這四個基本的資料型別。python 對字串的處理是非常強的,所以掌握一些 python 對字串的基本操作是非常有必要的.在 python2 裡面預設都是用 unicode 編碼的,而 windows 裡面的檔案預設是...

c c 基礎篇之資料型別轉換

c c 常見的資料型別轉換 1.常見的單類基本型別轉換 1 強制型別轉換 如 int a int 9.87 結果a 9 char c char 97 結果為c a 特別注意的是,在c 11中,增加了auto關鍵字,轉換型別相對智慧型化 auto c int 9.87 結果c 9 2 string與c...

基礎之資料型別

基本型別包括位元組型 char 整型 int 和浮點型 float double 定義基本型別變數時,可以使用符號屬性signed unsigned 對於char int 和長度屬性short long 對於int double 對變數的取值區間和精度進行說明。下面列舉了dev c 下基本型別所佔位...