以下代码对转换操作做了简单的封装
#include <WinNls.h>
std::string SysWideToMultiByte(const std::wstring& wide, unsigned int code_page) {
int wide_length = static_cast<int>(wide.length());
if (wide_length == 0)
return std::string();
// Compute the length of the buffer we'll need.
int charcount = WideCharToMultiByte(code_page, 0, wide.data(), wide_length,
NULL, 0, NULL, NULL);
if (charcount == 0)
return std::string();
std::string mb;
mb.resize(charcount);
WideCharToMultiByte(code_page, 0, wide.data(), wide_length,
&mb[0], charcount, NULL, NULL);
return mb;
}
std::wstring SysMultiByteToWide(const std::string& mb, uint32 code_page) {
if (mb.empty())
return std::wstring();
int mb_length = static_cast<int>(mb.length());
// Compute the length of the buffer.
int charcount = MultiByteToWideChar(code_page, 0,
mb.data(), mb_length, NULL, 0);
if (charcount == 0)
return std::wstring();
std::wstring wide;
wide.resize(charcount);
MultiByteToWideChar(code_page, 0, mb.data(), mb_length, &wide[0], charcount);
return wide;
}
int _tmain(int argc, _TCHAR* argv[])
{
char strName[] = "12345";
WCHAR wstrName[] = {WCHAR('1'), WCHAR('2'), WCHAR('3'), WCHAR('4'), WCHAR('5'), WCHAR(0)};
WCHAR* pwstrName = &(wstrName[0]);
char strTemp[256];
wchar_t tstrTemp[256];
wchar_t* tstrPoint = &(tstrTemp[0]);
memset(tstrPoint, 0, sizeof(tstrTemp));
long len = lstrlenA(strName)+1;
MultiByteToWideChar( CP_ACP, 0, strName,
strlen(strName)+1, tstrPoint,
sizeof(strName)/sizeof(strName[0]) );
WideCharToMultiByte( CP_ACP, 0, pwstrName, lstrlenW(pwstrName)+2,
(LPSTR)strTemp, 256, NULL, NULL );
return 0;
}