原文
把
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...