mbstowcs s實現wchar t轉成char

2021-06-29 01:35:14 字數 4010 閱讀 9676

原文

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;

wstr=(wchar_t*)malloc(len*sizeof(wchar_t));

mbstowcs_s(&converted, wstr, len, cstr, _truncate);

其結果是

wstr

中儲存了

cstr

的wchar_t

版本。

wchar_t*

轉換為char*

和上面的方法類似,用

stdlib.h

中的wcstombs_s

函式,例子:

wchar_t

*wstr = l"string to convert";

size_t len = wcslen(wstr) + 1;

size_t converted = 0;

char

*cstr;

cstr=(char*)malloc(len*sizeof(char));

wcstombs_s(&converted, cstr, len, wstr, _truncate);

這時wstr

中的內容將被轉化為

char

版本儲存在

cstr中。

另外還可以通過流的方法來

char*

型別轉換為

wchar_t*

型別,但這樣的轉換得到的結果將是

const

型別,而類似的方法不能將

wchar_t*

型別轉換為

char*

型別。

把(

const

)char*

轉換為const wchar_t*

需要用到

sstream 

標頭檔案:

char

*cstr="string to convert";

wstringstream wss;

wss<

再呼叫wss.str().c_str(); 

即可得到

const wchar_t* 

型別的返回值。

雖然stringstream

流不能將

wchar_t*

轉換成char*

,但可以用來進行數值型別和字串之間的轉換,例如:

double

d=2734792.934f;

stringstream ss;

ss<

呼叫ss.str()

可得到string

型別字串

」273479e+006」

,又如:

string str("299792458");

stringstream ss;

long

i=0;

ss<

ss>>i;

此時i=299792458。

char 轉wchar_t 及wchar_t轉char

利用widechartomultibyte來轉換的函式

通常適合於window平台上使用

#include 

#include 

int _tmain(

int argc, _tchar* argv)

// 將wchar_t* 轉成char*的實現函式如下:

char *w2c(

char *pcstr,

const wchar_t *pwstr, size_t len)

// 將char* 轉成wchar_t*的實現函式如下:

// 這是把asii字元轉換為unicode字元,和上面相同的原理

void c2w(wchar_t *pwstr,size_t len,

const 

char *str)

} 或者用此種方法更好一些:**********==我自已做的

//把ascii 字元轉換為unicode字元

wchar_t* cphone_hq::ctow(wchar_t *pwstr, 

const 

char *str)

return buffer;

delete buffer; }

unicode的出現是為了適應軟體國際化的需要。unicode不同於雙位元組字符集(dbcs)。

一、相關操作函式

1、dbcs使用下面的函式操作字串:

charnext——獲得後乙個字元

charprev——獲得前乙個字元

isdbcsleadbyte——判斷是否為兩個位元組字元的第乙個位元組

c++執行期庫提供了以"_mbs"開頭的一系列的函式操作dbcs。類似的函式有_mbscat等。

2、ansi字符集是乙個美國標準。c++執行期庫提供了以"str"開頭的一些列的函式操作此字符集。

3、c++執行期庫為unicode字符集提供了一系列以"wcs"開頭的函式。

二、對應的資料型別

1、對於ansi字元定義為char。

2、對於unicode的字元定義為wchar_t。

三、使用環境

1、首先要說明的是win98對於unicode的支援是很微弱的,所以如果要在win98上執行unicode編譯的程式,可能造成執行錯誤或者失敗。

2、 由於win2000及以後的os的核心都是使用unicode編寫的,所以雖然可以在其上執行ansi編碼的程式,但是其執行過程中很多地方都需要將 ansi轉換為unicode以後,呼叫unicode版本的函式,因為這個轉換的過程存在所以ansi的程式執行效率不高。在win2000上最好使用 unicode編寫程式。

四、編寫通用的程式

1、在程式設計的時候使用tchar資料型別,此型別能夠根據預編譯巨集的定義,將其轉換為ansi或者是unicode。

2、預編譯巨集_mbcs、_unicode和unicode。_mbcs是多位元組和ansi字串的編譯巨集。此時tchar將轉換為char。_unicode和unicode是unicode編碼的預編譯巨集,tchar將轉換為wchar_t。

3、_unicode和unicode與_mbcs不能在編譯的時候同時被定義。

4、_unicode巨集用於c執行期庫的標頭檔案,unicode巨集用於windows標頭檔案。一般同時定義這兩個巨集。

五、轉換函式

1、unicode轉換為ansi使用:multibytetowidechar。

2、ansi轉換為unicode使用:widechartomultibyte。

寬字元轉多字元:

size_t wcstombs(char *mbstr, const wchar_t *wcstr, size_t count );

多字元轉寬字元:

size_t mbstowcs(wchar_t *wcstr, const char *mbstr, size_t count );

另:l"ab"是c/c++標準巨集,使用上是沒有問題的

1、client 裡有些函式介面需要unicode,這些由於資源也在本地,可以直接使用multibytetowidechar或者mbstowcs+setlocale 轉換

2、對於需要從 中文client->伺服器->韓文client的方式下,在傳文字的情況下,需要將文字的語言**一起傳出去,在接受端可以使用指定的代 碼,轉換。伺服器如有必要的話,也可以使用該**轉換,這樣就可以在client上同時顯示多國語言了

快速排序演算法實現(遞迴實現 棧實現)

基本思想 選擇乙個基準元素,比如選擇最後乙個元素,通過一趟掃瞄,將待排序列分成兩部分,一部分比基準元素小,一部分大於等於基準元素,此時基準元素在其排好序後的正確位置,又稱為軸位置,此位置的元素確定後不再參與排序,然後再用同樣的方法遞迴地排序劃分的兩部分。分析 快速排序是不穩定的排序。快速排序的時間複...

介面實現與配置實現

在實現系統功能的時候,通常會首先定義好功能的介面,在系統功能不斷被實現的過程中,慢慢的發現有些介面的實現很類似,這個時候通常會開始做一次抽象,形 成乙個共同的部分,慢慢的系統形成了乙個抽象的層次,而為了通用,通常是通過定義介面,形成乙個抽象類,抽象類中暴露出一些抽象方法供外部擴充套件實 現,逐步的積...

js分頁實現,前端實現。

主要是借鑑了網上乙個例子,自己重新加了樣式,新增了跳轉,修改了一些小地方,用於和大家一起分享,前端分頁的技巧,的資料是我已經寫好了,其實大家也可以前端渲染 然後再分頁,都是可以的。其實分頁最關鍵是這兩句 var startrow currentpage 1 pagesize 1 currentpag...