窄字节宽字节的互转(string--wstring)

简介: 窄字节宽字节的互转(string--wstring)

方法一:使用c++11的特性:

std::wstring_convert> conv;

例子如下:

#include <iostream>
#include <string>
#include <locale>
#include <codecvt>
using namespace std;
int main()
{
  std::wstring str = L"123,宋体!";
  std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;
  std::string narrowStr = conv.to_bytes(str);
  std::wstring wideStr = conv.from_bytes(narrowStr);
  while (1);
  return 0;
}

方法二:不使用库函数,直接转换

std::string ws2s(const std::wstring& str)
{
  int tm1 = GetCurTime();
  char*     pElementText;
  int    iTextLen;
  // wide char to multi char
  iTextLen = WideCharToMultiByte(CP_ACP, 0, str.c_str(), -1, NULL, 0, NULL, NULL);
  pElementText = new char[iTextLen + 1];
  memset((void*)pElementText, 0, sizeof(char)* (iTextLen + 1));
  ::WideCharToMultiByte(CP_ACP, 0, str.c_str(), -1, pElementText, iTextLen, NULL, NULL);
  std::string strText;
  strText = pElementText;
  delete[] pElementText;
  int tm2 = GetCurTime() - tm1;
  return strText;
}
相关文章
QString与char *之间的完美转换,支持含有中文字符的情况
QString与char *之间的完美转换,支持含有中文字符的情况
1861 0
|
6月前
|
C#
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
173 2
|
C++
33.【C/C++ char 类型与Ascii大整合,少一个没考虑你打我】(二)
33.【C/C++ char 类型与Ascii大整合,少一个没考虑你打我】
69 0
|
自然语言处理 C语言 C++
33.【C/C++ char 类型与Ascii大整合,少一个没考虑你打我】(一)
33.【C/C++ char 类型与Ascii大整合,少一个没考虑你打我】
44 0
|
C++
33.【C/C++ char 类型与Ascii大整合,少一个没考虑你打我】(三)
33.【C/C++ char 类型与Ascii大整合,少一个没考虑你打我】
53 0
使用base64对图片进行编码、对byte[]进行编码
使用base64对图片进行编码、对byte[]进行编码
80 0