**:
unicode或者寬字元都沒有改變char資料型態在c中的含義。char繼續表示1個位元組的儲存空間,sizeof (char)繼續返回1。理論上,c中1個位元組可比8位長,但對我們大多數人來說,1個位元組(也就是1個char)是8位寬。
c中的寬字元基於wchar_t資料型態,它在幾個表頭檔案包括wchar.h中都有定義,像這樣:
typedef unsigned short wchar_t ;
因此,wchar_t資料型態與無符號短整數型態相同,都是16位寬。
要定義包含乙個寬字元的變數,可使用下面的語句:
wchar_t c = 'a' ;
變數c是乙個雙位元組值0x0041,是unicode表示的字母a。(然而,因為intel微處理器從最小的位元組開始儲存多位元組數值,該位元組實際上是以0x41、0x00的順序儲存在記憶體中。如果檢查unicode文字的計算機儲存應注意這一點。)
您還可定義指向寬字串的指標:
wchar_t * p = l"hello!" ;
注意緊接在第乙個引號前面的大寫字母l(代表「long」)。這將告訴編譯器該字串按寬字元儲存-即每個字元占用2個位元組。通常,指標變數p要占用4個位元組,而字串變數需要14個位元組-每個字元需要2個位元組,末尾的0還需要2個位元組。
同樣,您還可以用下面的語句定義寬字元陣列:
static wchar_t a = l"hello!" ;
該字串也需要14個位元組的儲存空間,sizeof (a) 將返回14。索引陣列a可得到單獨的字元。a[1] 的值是寬字元「e」,或者0x0065。
雖然看上去更像乙個印刷符號,但第乙個引號前面的l非常重要,並且在兩個符號之間必須沒有空格。只有帶有l,編譯器才知道您需要將字串存為每個字元2位元組。稍後,當我們看到使用寬字串而不是變數定義時,您還會遇到第乙個引號前面的l。幸運的是,如果忘記了包含l,c編譯器通常會給提出警告或錯誤資訊。
您還可在單個字元文字前面使用l字首,來表示它們應解釋為寬字元。如下所示:
wchar_t c = l'a' ;
但通常這是不必要的,c編譯器會對該字元進行擴充,使它成為寬字元。
字串 前 L的含義
一 在字串前加乙個 l作用 unicode字符集是兩個位元組組成的。l告示編譯器使用兩個位元組的 unicode 字符集。如 l 我的字串 表示將 ansi字串轉換成unicode 的字串,就是每個字元占用兩個位元組。strlen asd 3 strlen l asd 6 二 t 巨集可以把乙個引號...
字串 前 L的含義
一 在字串前加乙個 l作用 unicode字符集是兩個位元組組成的。l告示編譯器使用兩個位元組的 unicode 字符集。如 l 我的字串 表示將 ansi字串轉換成unicode 的字串,就是每個字元占用兩個位元組。strlen asd 3 strlen l asd 6 二 t 巨集可以把乙個引號...
Python字串前加r u的含義
python字串前加字元r是告訴直譯器該字元是原始字元 不要轉義 原始字串 所有的字串都是直接按照字面的意思來使用,沒有轉義特殊或不能列印的字元。原始字串除在字串的第乙個引號前加上字母 r 可以大小寫 以外,與普通字串有著幾乎完全相同的語法。python字串前加字元u是告訴直譯器該字元是按照unic...