string 与 wstring 相互间的转换

第一种方法

调用Windows的API函数WideCharToMultiByte()函数和MultiByteToWideChar()函数

第二种方法

使用ATL的CA2W类和W2CA类。或使用A2W宏与W2A宏。

第三种方法

跨平台的方法,使用CRT库的mbstowcs()函数和wcstombs()函数,需设置locale

string ws2s(const wstring str)
{size_t _DSize = 2*str.size()+1;char * _Dest = new char[_DSize];memset(_Dest, 0, _DSize);WideCharToMultiByte(CP_ACP, NULL, str.c_str(), str.size(), _Dest, _DSize, NULL, NULL);string result = _Dest;delete [] _Dest;return result;
}

string ws2s(const wstring str)
{size_t _DSize = 2*str.size()+1;char * _Dest = new char[_DSize];memset(_Dest, 0, _DSize);wcstombs(_Dest, str.c_str(), _DSize);string result = _Dest;delete [] _Dest;return result;
}

string ws2s(const wstring str)
{string curLocale = setlocale(LC_ALL, NULL);setlocale(LC_ALL, "chs");size_t _DSize = 2*str.size()+1;const wchar_t * _Source = str.c_str();char * _Dest = new char[_DSize];memset(_Dest, 0, _DSize);wcstombs(_Dest, _Source, _DSize);string result = _Dest;delete [] _Dest;setlocale(LC_ALL, curLocale.c_str());return result;
}

多字节转换为宽字节,原理相同,参照如上代码

转载于:https://www.cnblogs.com/kingdom_0/articles/2823671.html

宽字节与多字节之间的转换相关推荐

  1. windows下宽字节和多字节的问题

    宽字节和多字节,一度是我的噩梦,明明是调用同一个API,但是最后的返回值一会是char *,一会又是wchar_t *,实属烦人. Windows中有两种编码格式: (1) ANSI/多字节编码(基本 ...

  2. 四字节与浮点数之间的转换(c语言实现)

    C语言中对于float类型的数据,主要使用4字节进行存储,以下为干货.实现四字节与浮点数之间的转换. 0.头文件添加 #include <math.h> 1.浮点数转换为四字节 void ...

  3. 兆、字节、位之间的转换

    1M=1024k=1048576字节 算法是: 1Byte(字节) = 8bit(位) 1KB = 1024Byte(字节) 1MB = 1024KB 1GB = 1024MB 1TB = 1024G ...

  4. Excel行高与像素值,列宽与像素值之间的转换,绘制Excel像素画。

    private static float GetDpiX() {try{using (Bitmap image = new Bitmap(1, 1)){using (Graphics graphics ...

  5. 宽字节 多字节 单字节 的问题

    感觉比较混乱,学习了一通,做个记录. 着急在windows下面用的话,可以先看这个: VC++ Windows平台字符透明编程大总结 http://blog.csdn.net/hellothere/a ...

  6. Java中字节数组和十六进制字符串之间的转换

    1. 概述 在本教程中,我们将看看将字节数组转换为十六进制字符串,反之亦然的不同方法. 我们还将了解转换机制并编写我们的实现来实现这一点. 2. 字节和十六进制之间的转换 首先,我们来看看字节和十六进 ...

  7. c++多字节与宽字节字符串转换(windows平台)

    原文网址:http://www.asarea.me/showdiary.php?id=193 许久没有写技术日志了,今天写一篇关于字符串转换的. 大家都知道,在标准c++中有string和wstrin ...

  8. A2W和W2A :很好的多字节和宽字节字符串的转换宏

    作者:朱金灿 来源:http://blog.csdn.net/clever101 以前看<Window核心编程>,感觉多字节和宽字节之间还比较麻烦的,至少MultiByteToWideCh ...

  9. 通过编写串口助手工具学习MFC过程——(三)Unicode字符集的宽字符和多字节字符转换...

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

最新文章

  1. 升级 Java 编程规范的6个约定
  2. 一种解决hadoop搭建出现的各种问题的简单粗暴的办法
  3. 线程同步 – lock和Monitor
  4. python 数学建模、时间戳_python-在matplotlib中绘制Unix时间戳
  5. VTK:可视化之CreateColorSeries
  6. SQL Server Management Studio Express出现一半中文一半英文的问题
  7. 详解分布式协调服务 ZooKeeper
  8. Unable to lock JVM Memory: error=12--elasticsearch
  9. mysql5.7初始密码查看及密码重置
  10. UEFI下windows启动过程
  11. 机器学习算法mini版
  12. 基于React和Html5的宠物领养平台网站设计与实现
  13. 【计算机软件基础】如何理解鲁棒性Robust?
  14. Python交通流仿真【含源码】
  15. AI如何在医疗中大显身手?
  16. 兔子数列规律怎么讲_“兔子数列”的秘密
  17. DevOps原则,听伍道长细细道来
  18. vue中控制台报错[WDS] Disconnected的解决办法
  19. 峰值电流检测电路设计/自己备忘
  20. MacOS 开启latex人生(mactex+texmaker安装)

热门文章

  1. .Net资源文件全球化
  2. 在Fedora上搭建GTK+的开发环境
  3. 离开,是一个新的开始
  4. 简述L4无人驾驶的发展
  5. 舒尔补理论Schur Compliment
  6. mysql创建bit类型报错_MySQL入门(三)——MySQL数据类型
  7. css 怎么设置盒子水平居中,用一段css实现盒子垂直水平居中方法(8种)-案例
  8. mysql 主从特性_mysql 5.6 新特性 主从推延
  9. 非root用户安装mysql_linux非root用户安装5.7.27版本mysql
  10. 鸽主姓名查询成绩_SQL学习之旅-Select简单查询