維尼的蜂巢

RealTime??!! It’s amazing!!!!

寬字元 八月 28, 2005

Filed under: HeartStory — kevinlin @ 7:28 上午
大家都知道
char * pc ="Hello!";
iLength = strlen(pc);
這時 iLength 會是6
不過
wchar_t * pw = L"Hello!";
iLength = strlen(pw);
編譯後會出現警告
‘function’ : incompatible types – from ‘unsigned short*’ to ‘const char*’
神奇的 原來pw是unsigned short型態
不過跑的結果 iLength 會是1
為什麼呢?
因為 字串"Hello!"的6個字元佔用了16個位元
0x0048 0x0065 0x006c 0x006f 0x0021
Intel的處理器在記憶體裡面把它存成
48 00 65 00 6c 00 6c 00 6f 00 21 00
假設strlen函式正試著想得到一個字串的長度,而且把第一個位元組當做字元開始計數,但接著如果下一個位元組是0,就表示字串的結束。
所以可以看出編譯器把字串L"Hello!"當成是一組16位元短整數型態資料,並將其保存在wchar_t陣列裡面。
最後有看到寬字元可以用  size_t__cdecl wcslen(const wchar_t *)

回應   上一頁 | 下一頁
 
可以用 TEXT Marco
TEXT
The TEXT macro identifies a string as Unicode when the UNICODE is defined during compilation. Otherwise, it identifies a string as an ANSI string. 

TEXT(
LPTSTR string // ANSI or Unicode string
);
Parameters
string
Pointer to the string to be interpreted as either Unicode or ANSI.

 
發佈者 ICS-LUSE (http://spaces.msn.com/members/Luse/) – 9月4日 下午 10:03
 
 
 
沒錯 就是要寫一堆marco
所以大型程式會看到像火星文的東西:P
 
發佈者 kaiwae (http://spaces.msn.com/members/kevinkaiwei/) – 9月3日 上午 10:42
 
 
 
這好像可以用text那些Marco 解掉 (如果我沒記錯的話)
 
發佈者 ICS-LUSE (http://spaces.msn.com/members/Luse/) – 9月2日 下午 10:55
 

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s