win32 wstring <-> string

static std::string w2c(std::wstring str)
	{
		int nlength = str.length();
		int nbytes = WideCharToMultiByte(0,0,str.c_str(),nlength,NULL,0,NULL,NULL);
		if(nbytes == 0) return "";

		char*buff = new char[nbytes+1];
		WideCharToMultiByte(0,0,str.c_str(),nlength,buff,nbytes,NULL,NULL);
		buff[nbytes] = ‘\0‘;
		std::string ret_str = std::string(buff);
		delete [] buff;
		return ret_str;
	}

static std::wstring c2w(std::string str)
	{
		if(str.length() == 0) return std::wstring();

		int nu = str.length();
		size_t n =(size_t)MultiByteToWideChar(CP_ACP,0,str.c_str(),nu,NULL,0);
		wchar_t*wbuff = new wchar_t[n+1];
		MultiByteToWideChar(CP_ACP,0,str.c_str(),(int)nu,wbuff,(int)n);
		wbuff[n] = 0;

		std::wstring wstr_ret = std::wstring(wbuff);
		delete []wbuff;
		return wstr_ret;
	}
时间: 2024-10-01 20:19:20

win32 wstring <-> string的相关文章

利用C++调用天气webservice-gSOAP方法

首先需要下载一个gSOAP工具包 下载路径为:https://sourceforge.NET/projects/gsoap2/ 至于有关于gSOAP的一些用法和包含的文件的说明可从官网查看:http://www.genivia.com/dev.html. 下载和使用gSOAP生成一些库文件提供给C++工程使用: 解压gsoap文件夹,此处解压的是gsoap-2.8文件夹,放在E盘 打开E:\gsoap-2.8\gsoap\bin\win32文件夹 创建一个文件名为wsmap.dat 以文本形式写

转: 带你玩转Visual Studio——带你理解多字节编码与Unicode码

上一篇文章带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑帮我们理解了Windows中的各种类型C/C++运行时库及它的来龙去脉,这是C++开发中特别容易误入歧途的一个地方,我们对它进行了总结和归纳.本篇文章我们将继续讲解C++开发中容易混淆的另一个概念——多字节字符集与Unicode字符集. 多字节字符与宽字节字符 char与wchar_t 我们知道C++基本数据类型中表示字符的有两种:char.wchar_t. char叫多字节字符,一个char占一个字节

几个字符串的误区,以及setlocale函数的使用

转自 http://www.blogjava.net/baicker/archive/2007/08/09/135642.html 转自 http://witmax.cn/character-encoding-notes.html 写了n年程序,近来在字符串上栽了.:( 认真的研究了一些关于字符串的文章,在此记下.许多关于字符串的问题,在文章最后的参考文章中,相信有更加深入和精确的描述.不过关于中文的处理,我想先补充一些自己的看法. 背景:WIN32 console程序,使用printf输出字符

在VC中检测内存泄漏

声明:checkleaks.h和checkleaks.cpp这两个文件中的代码是在网上COPY的,但原来那个网站现在却找不到了 所以,这篇文章不算完全原创,呵呵. 就当作是一个存档吧 先上代码: [cpp] view plaincopyprint? //checkleaks.h #ifndef SET_DEBUG_NEW_H #define SET_DEBUG_NEW_H #ifdef _DEBUG #define DEBUG_CLIENTBLOCK   new( _CLIENT_BLOCK, 

C++读取注册表

昨天受一朋友要求,帮忙写一个用C++读取注册表的程序.这个朋友是搞Java的,肯定不知道C++怎么写啦!他的需求也奇怪:用js调用一个浏览器插件,通过插件获取注册表中指定键的值,插件肯定是用C++写了. 于是乎我就在网上查了一下"C++读取注册表",一搜一大片但都是一些初学C++的人写的,多数不能用,而且那写的程序真是无力吐槽--一怒之下我就自己花一个小时写了一个,费话不说了,直接上代码: C++读取注册表 GetRegValue.h: #ifndef __GETREGVALUE_H_

for (var i in obj/array){}

for (var i in obj/array){} for...in 缺陷:性能问题,不输出obj的内置成员,内置成员重写后,ie下仍不显示. 在跨浏览器的设计中,我们不能依赖于for in来获取对象的成员名称. for...in对调试非常有用,显示对象的所有属性的名字和值的列表. Navigator对象包含了访客的浏览器名称.版本以及更多信息<SCRIPT LANGUAGE="JScript">var LANG = navigator.browserLanguage;f

C#设置某程序开机自启动[修改注册表方式]

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using Microsoft.Win32; 7 using org.nipc.securityManager.client.UpdateModule; 8 9 namespace SettingAutoRun 10 { 11 class Pr

Office转SWF的一些感想(Office2007和Office2010)

Office2007需要借助SaveAsPDFandXPS的插件完成,Office2010可以直接兼容. Office2PDF主要采用的是 Microsoft.Office.Interop的方式进行,PDF2SWF主要采用的是SWFTools的pdf2swf工具.至于SWFTools的各种命令,网上有很多的资料可以参考,这里就不一一举例了. 1 /// <summary> 2 /// 把Word文件转换成为PDF格式文件 3 /// </summary> 4 /// <par

WCF 大数据量如何从服务端传到客户端

当数据量很大时,想要从服务端传到客户端可能会遇到这几个问题:基础连接意外关闭:内存溢出:或时间过长. 下面是我在项目中实现客户端导出txt文件时解决方法.txt有150M左右. namespace XSGLSRV900 //服务端接口实现 { public class XSGLService : IXSGLService { //这些变量只能是静态的,如果是非静态的,在客户端每一次调用服务端都认为是新建一个服务对象,这些值将不再能读取到.关于WCF服务端的三种模式可参考http://www.cn