问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何实现 std::string转成 LPWSTR 呢,求大牛!

发布网友 发布时间:2022-04-25 16:13

我来回答

2个回答

热心网友 时间:2023-10-16 12:13

我提供这么几个信息,你知道一下最终用MultiByteToWideChar这个windows api函数去转就可以了

1、std::string字符串的长度: xxx.size()
2、从std::string获取const char* (或者叫LPCSTR):xxx.c_str()
3、从LPCSTR转到LPWSTR:MultiByteToWideChar,这个函数参数很多,去网上搜一下用法,几个重要的参数是输入字符串(LPCSTR),输入字符串的长度,输出字符串(LPWSTR),输出字符串的最大长度(为了防止溢出),以及要使用的编码(本机编码直接用CP_ACP就可以了)
4、如果说 char xxx[10]; 对应的是LPSTR的话,那么 wchar_t xxx[10]; 对应的就是LPWSTR:LPSTR和LPWSTR都是指针。(10只是例子

过程:1、准备一个缓冲区存放输出的字符串 2、用MultiByteToWideChar把输入的字符串转了存到1提到的缓冲区里

热心网友 时间:2023-10-16 12:14

1. LPCTSTR 实际上就是字符串198不过是会根据当前的字符集进行自适应:如果是ANSI的话,LPCTSTR = const char* ,如果是Unicode的话,LPCTSTR = const wchar_t*。其实这是windows下的命名方式,你把它的名字拆开了看就很清晰:LP:长指针,C:const,T:自适应,STR:字符串。类似的还有LPCSTR、LPSTR、LPTSTR、LPWSTR等等,你按照上面的方法拆开看就很清楚。2. std::string。这是C++标准库中的字符串类。是C++语言标准的一部分。提供对字符串的封装。用起来还算比较方便。它是窄字符类型(char),对应的还有一个宽字符版(wchar_t)的std::wstring类。3. VT_BSTR,VT是Variant(变体类型)的缩写,BSTR则是COM下的通用字符串类型。VT_BSTR其实并不是一个类型,它只是一个枚举用于标识当前的Variant到底是不是BSTR字符串。估计你真正想问的是BSTR这个类型。这是COM中的通用字符串类型。可以跨语言。它的本质很简单,首先最前面有一个整数表示整个字符串的长度,接下来跟一个字符串,它统一为UTF-16编码,一个字符占两个字节(wchar_t类型),字符串以\0结尾。 它可以在多个程序和语言中传递,而且还可以被放进Variant类型的万能变量中。第一种LPCTSTR在windows编程中很常见,只是对const char*或const wchar_t*的重定义而已1第二种std::string在C++编程中很常见n用于各种字符串的处理。第三种用得较少,主要是在ATL项目或者其它涉及到COM接口的时候会用到。转化:1.蹋校茫裕樱裕摇∽。螅簦洌海海螅簦颍椋睿纾喝缟纤觯蹋校茫裕樱裕沂导噬鲜橇街掷嘈椭唬涸诜牵眨睿椋悖铮洌逑率牵悖铮睿螅簟。悖瑁幔颍冢眨睿椋悖铮洌逑率牵悖铮睿螅簟。鳎悖瑁幔颍撸簦?17如果是前者1739那么很简单:直接赋值就可以了,std::string支持用const char*来构造,所以可以自动转化:LPCTSTR a = "hello!";std::string b = a; 要反着转回来也很方便,使用std::string提供的c_str()方法就可以:std::string a = "hello";LPCTSTR b = a.c_str();但如果LPCTSTR是后者即const wchar_t*那就麻烦了,因为这涉及到不同字符集之间的编码转换。不能直接转了,必须先得对字符串转编码才行,比如调用Win32API下的 MultiByteToWideChar()和WideCharToMultiByte()函数。2. LPCTSTR转BSTR:可以使用COM中封装的类CComBSTR来代表BSTR:CComBSTR a("Hello!");BSTR b = a.m_bstr;也可以使用ConvertStringToBSTR等API。反向的转换则可以使用ConvertBSTRToString。3. std::string转BSTR:现用c_str()转成const char*3951再用上述方法转成BSTR。...余下全文>>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怀孕四个月补钙可以吗 孕妇吃什么时候钙片好 孕妇吃什么钙片最好 怀孕补钙是必须的吗?孕妇钙片品牌哪个好? ...在长高的黄金发育时期,会影响容貌五官的变化吗,不仅没有发育到变... 冬至吃饺子的诗词 立冬吃饺子的暖心诗词 宁波全封闭学校有哪些 宁波市北仑区小港镇会计学校在那? 或红联镇也可以 江南教育集团小港中心幼儿园园况介绍 红联哪里有报暑假班 湖北回天新材料(宜城)有限公司怎么样? 傲世三国中文版秘籍 谁知道<傲视三国>中的秘计? 上海回天新材料有限公司怎么样? 傲世三国 湖北回天新材料股份有限公司怎么样? 为什么一下载程序就重启? XP系统为什么会自动重启? Window子系统能不能安装velocyto 拯救者录屏后存在哪里 百信老人机怎么装卡 农行小微商户收款码的费率 3dsmax2009中如何把英寸单位的模型转化为毫米单位的模型喃? 怎么把高版本的模型转换成低版本,我指的3dsmax用的模型 3dmax将模型转换为多边形以后面上出现多余的线怎么去掉 如何把3DMAX格式模型改成MDX格式的? 怎样将3Dmax做出的模型转成unity3d格式?求详解 3DMAX模型转换为SolidWorks 在网上下载的3ds max模型,怎么转化为可编辑多边形? 怎么样把3dsmax模型转到cad模型空间 家庭装修胶水有哪些好的品牌值得推荐? ergo胶水是全球胶水十大品牌吗? 三国群英传ol10000架设 回天新材料 欧亨利作品《一元伪币的作用》《一份报纸的经历》原文 傲世三国秘籍 求三国群英传7详细的制作新武器图文教程,就是用RPG提取OL武器素材那种... 专业瓷砖美缝剂十大品牌有哪些? 谁能给我提供一些有关爱情的诗词 只玩魔兽争霸会重启,为何? 傲视三国 关于橡胶的所有股票代码和名称谢谢 《傲视三国》的秘笈 黄瓜切片敷脸正确方法 怀念亲人逝世的伤感句子有哪些? 刚去世亲人伤感的句子 黄瓜片可以直接敷脸上吗 黄瓜片敷脸,一天敷几次?一次几分钟? 失去亲人伤感句子 黄瓜敷脸怎样敷才正确