測(cè)試環(huán)境: vs2008
開發(fā)語言:C++
#include <iostream>
#include <windows.h>
#include <string>
// wchar_t to string
void Wchar_tToString(std::string& szDst, wchar_t *wchar)
{
wchar_t * wText = wchar;
DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,wText,-1,NULL,0,NULL,FALSE);// WideCharToMultiByte的運(yùn)用
char *psText;
// psText為char*的臨時(shí)數(shù)組,,作為賦值給std::string的中間變量
psText = new char[dwNum];
WideCharToMultiByte (CP_OEMCP,NULL,wText,-1,psText,dwNum,NULL,FALSE);// WideCharToMultiByte的再次運(yùn)用
szDst = psText;// std::string賦值
delete []psText;// psText的清除
}
// string to wstring
void StringToWstring(std::wstring& szDst, std::string str)
{
std::string temp = str;
int len=MultiByteToWideChar(CP_ACP, 0, (LPCSTR)temp.c_str(), -1, NULL,0);
wchar_t * wszUtf8 = new wchar_t[len+1];
memset(wszUtf8, 0, len * 2 + 2);
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)temp.c_str(), -1, (LPWSTR)wszUtf8, len);
szDst = wszUtf8;
std::wstring r = wszUtf8;
delete[] wszUtf8;
}
int main(int argc, char *argv)
{
// wchar_t to string
std::string szDest;
wchar_t wText[20] = {L"寬字符轉(zhuǎn)換字符串實(shí)例!OK!"};
Wchar_tToString(szDest, wText);
std::cout<<"szDest: "<<szDest<<std::endl;
/**
* wchar_t 定義的變量為什么不能輸出呢?
* 寬字符類型要本地化,,否則輸不出想要結(jié)果,。
* 本地化有三條語句可以使用,,任取其一,。最后一句是全局函數(shù),前兩個(gè)是wcout的一個(gè)成員函數(shù)的兩種表達(dá)方式,。
*/
//std::wcout.imbue(std::locale("chs"));
//std::wcout.imbue(std::locale(""));
setlocale(LC_ALL,"Chinese-simplified");
// string to wstring
std::string szSrc = "字符串轉(zhuǎn)換寬字符實(shí)例!OK!";
std::wstring wszDest;
StringToWstring(wszDest, szSrc);
std::wcout << "wszDest: " << wszDest << std::endl;
/**
string to wchar_t
*/
string str= "字符串轉(zhuǎn)換寬字符實(shí)例!OK!";
std::wstring widstr = std::wstring(str.begin(), str.end());
const wchar_t *pwidstr = widstr.c_str();
// 此方法簡(jiǎn)單,,但是 delete wc;時(shí)會(huì)出異常
wchar_t * wc = new wchar_t[szSrc.size()];
swprintf(wc,L"%S ",szSrc.c_str());//注意大寫S。,。
std::wcout <<"szSrc: " << wc <<std::endl;
//delete wc;
system("PAUSE");
}
|