测试环境: vs2008

开发语言:C++

#include <iostream>
#include <windows.h>
#include <string>

// wchar_t to string
void Wchar_tToString(std::string& szDst, wchar_t *wchar)
{
wchar_t * wText = wchar;
DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,wText,-1,NULL,0,NULL,FALSE);// WideCharToMultiByte的运用
char *psText; // psText为char*的临时数组,作为赋值给std::string的中间变量
psText = new char[dwNum];
WideCharToMultiByte (CP_OEMCP,NULL,wText,-1,psText,dwNum,NULL,FALSE);// WideCharToMultiByte的再次运用
szDst = psText;// std::string赋值
delete []psText;// psText的清除
}

// string to wstring
void StringToWstring(std::wstring& szDst, std::string str)
{
std::string temp = str;
int len=MultiByteToWideChar(CP_ACP, 0, (LPCSTR)temp.c_str(), -1, NULL,0); 
wchar_t * wszUtf8 = new wchar_t[len+1]; 
memset(wszUtf8, 0, len * 2 + 2); 
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)temp.c_str(), -1, (LPWSTR)wszUtf8, len);
szDst = wszUtf8;
std::wstring r = wszUtf8;
delete[] wszUtf8;
}

int main(int argc, char *argv)
{

// wchar_t  to string
std::string szDest;
wchar_t wText[20] = {L"宽字符转换字符串实例!OK!"};
Wchar_tToString(szDest, wText);
std::cout<<"szDest: "<<szDest<<std::endl;

/**
* wchar_t 定义的变量为什么不能输出呢?
* 宽字符类型要本地化,否则输不出想要结果。
* 本地化有三条语句可以使用,任取其一。最后一句是全局函数,前两个是wcout的一个成员函数的两种表达方式。
*/
//std::wcout.imbue(std::locale("chs"));
//std::wcout.imbue(std::locale(""));
setlocale(LC_ALL,"Chinese-simplified");

// string to wstring
std::string szSrc = "字符串转换宽字符实例!OK!";
std::wstring wszDest;
StringToWstring(wszDest, szSrc);
std::wcout << "wszDest: " << wszDest << std::endl;

/**
    string to wchar_t
 */

string str= "字符串转换宽字符实例!OK!";
std::wstring widstr = std::wstring(str.begin(), str.end());
const wchar_t *pwidstr = widstr.c_str();

// 此方法简单,但是 delete wc;时会出异常
wchar_t   *   wc   =   new   wchar_t[szSrc.size()]; 
swprintf(wc,L"%S ",szSrc.c_str());//注意大写S。。 
std::wcout <<"szSrc: " << wc <<std::endl;
//delete wc;

system("PAUSE");
}

wchar_t 转换 string std::string 转换 wchar_t相关推荐

  1. QT在使用protocal的问题解决记录之std :: string和QByteArray之间的无损转换

    服务器端使用的是skynet+lua,lua版本是5.3.5,pbc库是前面的教程中编译的. 客户端使用是C++版本的protobuf,也是教程里编译的. 客户端使用的是Qt库QTcpSocket收网 ...

  2. C++中std::string与C-String字符数组的互相转换

    C语言中只有字符数组这一说法,没有C++专门封装的字符串类std::string.而字符数组C-String以\0作为结束符.std::string其实还是存储了C-String这个指针,只不过不同的 ...

  3. ATL::CStringA和std::string之间转换的一些误区

    对于刚做windows下VC的开发同学,类型转换应该是一个令其很苦恼的问题.我刚写工作的时候,也为这类问题不停的在网上搜索转换方法.最近工作中遇到一个"神奇"的bug(一般&quo ...

  4. 利用boost做string到wstring转换,以及字符集转换

    #include <boost/locale.hpp> int _tmain(int argc, _TCHAR* argv[]) {//std::locale::global(std::l ...

  5. C++/C++11中std::string用法汇总

    C++/C++11中std::string是个模板类,它是一个标准库.使用string类型必须首先包含<string>头文件.作为标准库的一部分,string定义在命名空间std中. st ...

  6. 【C++标准库】std::string用法指南源码剖析

    文章目录 1.ASCII码 (1)计算机如何表达字符 2.C 语言中的字符类型 char (1)思想:char 即整数 (3)C 语言帮手函数 (4)C语言中的字符串 (4)C 语言转义符 3.C++ ...

  7. C++ 笔记(35)— std::to_string 转换整形数字为字符串

    1. 函数原型 string to_string (int val); string to_string (long val); string to_string (long long val); s ...

  8. C++学习笔记-----std::string的=,+,+=对int,char类型操作数的支持

    C++中提供了封装的字符数组std::string,同时提供了多种方便的运算操作. 调用构造函数时的=运算符不支持int,char类型的操作数 string str1 = 'a'; //errorst ...

  9. 几种C++ std::string和std::wstring相互转换的转换方法

    第一种方法:调用WideCharToMultiByte()和MultiByteToWideChar(),代码如下(关于详细的解释,可以参考<windows核心编程>): #include ...

最新文章

  1. 大连网络推广明确做好网站标题优化对网站排名的提升影响
  2. 【Python-ML】非线性映射降维-KPCA方法-新样本映射
  3. python读取xlsx文件pandas_python-如何使用iPython中的pandas库读取.xlsx文件?
  4. getView的解析流程
  5. 在Spring Boot中使用配置元数据来配置您的配置
  6. linux signal 符号表6,gdb调试信息__000_linux-gnu_00000000_002_rw-p__169IT.COM
  7. 组合体视图的画图步骤_(完整版)组合体视图画法教案
  8. UNDO 表空间管理
  9. 24有几种封装尺寸_mmWave设备的封装应该如何处理
  10. 普通话测试-短文60篇文章,附带拼音(41-50篇)
  11. 关于private继承
  12. End-to-End Object Detection with Fully Convolutional Network 论文笔记
  13. 关于 Elasticsearch 429 Too Many Requests 的 排查思考
  14. Linux操作系统渗透测试
  15. 基于改进禁忌搜索算法求解TSP问题(Matlab代码实现)
  16. Python初学心得体会
  17. Cookie Session跨站无法共享问题(单点登录解决方案)
  18. 生成Mac icns应用软件图标和Windows ico不同尺寸的png图标最可靠的方式
  19. Qt软件打包后报错“无法定位程序输入点于动态链接库.exe上。”解决办法(超详细,看完不会怪我)
  20. 掌财社:马桶MT被山寨,聊天宝赚钱不如捡废品,多闪表现平平

热门文章

  1. Nacos 1.0.1 发布,社区一起定义的 Nacos
  2. 机械设计中的BOM表
  3. VIVADO使用——打开已有文件
  4. linux配置usb主从_基于Linux的USB主/从设备之间的三种通信方式
  5. [RK3568 Android11] 开发之开发者选项中添加USB OTG模式切换(二)
  6. 了解视图dm_os_performance_counters的cntr_type含义
  7. matlab之用m脚本自动完成检查变量命名规范
  8. 关于易语言卡退的问题
  9. Golang lua交互——gopher-lua中call函数使用
  10. 跨国企业在中国 | 洲际新签15家特许经营模式酒店;爱马仕中国第26家卖店在厦门揭幕...