char*, wchar*互转

来源:互联网 发布:层次数据库模型举例 编辑:程序博客网 时间:2024/05/22 14:22
以下代码对转换操作做了简单的封装
#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;}