窄字节宽字节的互转(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;
}
相关文章
|
8月前
|
C#
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
251 2
C#编程-24:String前面不足位数补零的方法
C#编程-24:String前面不足位数补零的方法
126 0
|
索引 Java Perl
LeetCode 6 ZigZag Conversion(Z型转换)(String)
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/48634663 ...
815 0
|
BI
关于byte 进制 float String 编码 16进制字符串转16进制byte的问题
首先 只有String才与编码有关; byte与其他类型转换时,要注意大端点还是小端点, 编码: Ascii Unicode gbk utf-8等等  byte 占 8位 可由两个16进制数(0xff)组成,一个16进制占4位,也可由8位二进制数组成等等,与编码没关系,但可用2进制表示,也可由其他进制表示。 “0xff”这样的16进制字符串转换成16进制byte Stri
1296 0