以前碰到這個問題整了很久,然後今天又碰到這個問題又整了很久,而且居然忘記了上次碰到過,誒看來是老了,所以還是做個筆記吧!
ascii 字元(窄字元,8位):char, char ,lpcstr, lpstr ,pchar, pcstr ,pstr ,std::string
unicode 字元(寬字元,16位):lpcwstr ,lpwstr ,pcwstr ,ptchar, pwchar, pwstr, wchar ,cstring
說說這些大寫字母的含義,這樣比較好記憶,
l表示long指標 這是為了相容windows 3.1等16位作業系統遺留下來的,在win32中以及其他的32位作業系統中, long指標和near指標及far修飾符都是為了相容的作用。沒有實際意義。
p表示這是乙個指標
c表示是乙個常量
t表示在win32環境中, 有乙個_t巨集
str表示這個變數是乙個字串
最常用的轉換 a 為窄字元 w 為寬字元:
a to w 的方式有:
w = _t(「a」) ;w = text(「a」); w = l」a」;w = a2w(a);
w to a 的方式有:
a = w2a(w) ;a = w2bstr(w) ;
此外:
wchar_t* chartowchar(const char* c)
wchar_t* stringtowchar(const std::string& s)
直接呼叫stringtowchar()函式就行了!
stl::string s1;lpctstr ps2 = s1.c_str();
cstring->std::string;
方法一:cstring過載過了const char *操作符,而std::string有const char *的建構函式。正好ok
cstring cstr("sdfs");
std::string sss(cstr);
方法二:
cstring str("hello");
string s;
s = str.getbuffer(0);
或 s = string(str.getbuffer(0));
//注意釋放releasebuffer
std::string->cstring
方法一:
string s("hello");
cstring str;
str = s.c_str();
或str = cstring(s.c_str());
寬字元和窄字元
關於寬字元和窄字元之間的區別,以及為什麼當我們採用printf和char 的時候可以輸出乙個中文字元,大概是因為預設情況下的編碼方式是utf 8的編碼方式。具體的可以參考這兩篇部落格 關於寬字元和窄字元 和 關於寬字元 unicode或者寬字元都沒有改變char資料型態在c中的含義。char繼續表示...
寬字元和窄字元的轉換介面
寬字元和窄字元的轉換需求很經常會遇到,今天從網上找了兩個函式,修改了一下,奉獻給大家。include include std wstring towidestring const char pstr,int len std wstring towidestring const std string ...
寬字元wchar t和窄字元char區別和相互轉換
1.首先,說下窄字元char了,大家都很清楚,就是8bit表示的byte,長度固定。char字元只能表示asii碼表中的256個字元,包括前128個可見字元和後面的128個不可見字元。而wchar t則是因為char所能表示的字元數太少 256個 而應運而生的,它的長度可以8bit,16bit,32...