窄字元轉寬字元

2021-06-18 03:27:04 字數 1283 閱讀 8650

以前碰到這個問題整了很久,然後今天又碰到這個問題又整了很久,而且居然忘記了上次碰到過,誒看來是老了,所以還是做個筆記吧!

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...