跨平台實現wchar t轉成char

2021-09-09 00:21:22 字數 1759 閱讀 9520

c++

標準中,

wchar_t是寬

字元型別,每

個wchar_t型別佔

2個位元組,

16位寬。

漢字的表示就要用到

wchar_t

。char,我們

都知道,佔乙個位元組,

8位寬。其

實知道了

這個以後,要在

wchar_t

和char兩種類

型之間轉換

就不難實現了。

wchar_t

轉換為char 的**

如下:

有如下的

wchar_t

和char變數

wchar_t w_cn = '中';

char c_cn[2] = ;

char *c2w(wchar_t w_cn , char c_cn[2])

其中需要注意的是乙個

16位的

wchar_t

需要用兩個8位的

char來儲存

之。我們

可以發現

另外乙個問題,

wchar_t

的高位字

節應該儲存在

char陣列

的低位位元組。

(這裡沒有仔

細研究了,

覺得怪怪的)。

這是完成了

wchar_t

到char的轉

化,char

到wchar_t

的轉換類似。

c++中,你要想這樣:

cout《列印

wchar_t

,那是不行的。

why?我想是

wchar_t

型別沒有重

載<<

運算子吧。要

顯示,我的方法是

string cn(c_cn);

cout<

這樣就能正確的列印

wchar_t

字元了。是不是感

覺好像做了好多事,但是完成的卻是很

簡單的事情?呵呵,其

實我也有同感,但是沒有

辦法。更簡單的

辦法,當然是直接用

api(

我乙個是

懶的去找了,二乙個自己動手

轉換有些

東西看的更清楚咯

),但是這樣的

轉換更靈活,在實際中

應該會用到的。

有了以上的基

礎,下面給出

wchar_t

字串到

char

字串的轉換代

碼:char *w2c(const wchar_t *pw , char *pc)

char *wstr2cstr(const wchar_t *pwstr , char *pcstr, size_t len)

*pcstr = '\0';

return ptemp ;

}return 0 ;

}   

上面就是**,

測試:int main(int arg , char *ar**) ;

char *pcstr = (char *)new char[2 * wcslen(pwstr)+1] ;

memset(pcstr , 0 , 2 * wcslen(pwstr)+1 );

wstr2cstr(pwstr , pcstr , wcslen(pwstr)) ;

str.assign (pcstr);

cout< }

mbstowcs s實現wchar t轉成char

原文 把 char 轉換為wchar t 用stdlib.h 中的mbstowcs s 函式,可以通過下面的例子了解其用法 char cstr string to convert size t len strlen cstr 1 size t converted 0 wchar t wstr wst...

字元編碼及寬字元型別 wchar t 的跨平台處理

這篇文章的目的是希望你能在看完後對字元的編碼和子節相關的東西,以及寬字元型別在不同平台之間的處理能有乙個清晰的認識,有出入的地方,感謝指正。字元編碼 電腦只有二進位制,人腦才有亂碼 凡是我們看到的亂碼都是由字元編碼引起的。如果對於字元編碼沒有乙個清晰的認識,那麼各種各樣的編碼格式在你的腦海裡肯定是混...

C 實現跨平台

要建立乙個c 跨平台的應用,亦難也易。難在什麼?所謂應用,自是實際應用,牽涉面很廣。一般來說,至少有如下幾個方面需要我們考慮 0.語言及基礎庫 1.作業系統相關的 2.網路 3.資料庫 4.介面 其它自然還有很多,如xml,加解密等等,這裡先討論前面列出的幾項。眾所周知,不同的作業系統即時是相同的函...