首页 > 编程语言 >c++各种字符串互转(char*、wchar_t*、CString、string、wstring、LPCWSTR)

c++各种字符串互转(char*、wchar_t*、CString、string、wstring、LPCWSTR)

时间:2024-06-08 11:59:59浏览次数:14  
标签:string buffer CString wstring cstr wstr str 互转

 1 //字符串转换宏
 2 //简写意思: C: const, T: Cstring, W: wstring, A: string
 3 
 4 //Cstring 转 wchar_t*:  
 5 wchar_t* p = cstr.AllocSysString()
 6 
 7 //Cstring 转 string : str=CT2A(cstr)
 8 #define CSTR2STR(cstr)   CT2A(cstr)
 9 
10 //Cstring 转 wstring: wstr= cstr;
11 #define CSTR2WSTR(cstr)   (cstr)
12 
13 //string 转 char* ch:  
14 char* ch=str.c_str();
15 
16 //string 转 Cstring : cstr=CA2T(str.c_str())
17 #define STR2CSTR(str)   CA2T(str.c_str())
18 
19 //string 转 wstring: wstr=CA2W(str.c_str())
20 #define STR2WSTR(str)   CA2W(str.c_str())
21 
22 //wstring 转 char* ch:  
23 char* ch=wstr.c_str();
24 
25 //wstring 转 string: str=CW2A(wstr.cstr())
26 #define WSTR2STR(wstr)   CW2A(wstr.c_str())
27 
28 //wstring 转 Cstring: CW2T(wstr.c_str())
29 #define WSTR2CSTR(wstr)   CW2T(wstr.c_str())
30 
//函数 31 // string 转 wstring 32 wstring str2wstr(const string& str) 33 { 34 wstring wstr; 35 int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), NULL, 0); 36 TCHAR* buffer = new TCHAR[len + 1]; 37 MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), buffer, len); 38 buffer[len] = '\0'; 39 wstr.append(buffer); 40 delete[] buffer; 41 return wstr; 42 } 43 44 //wstring 转 string 45 string wstr2str(const wstring& wstr) 46 { 47 string str; 48 int len = WideCharToMultiByte (CP_ACP, 0, wstr.c_str(), wstr.size(), NULL, 0,NULL,NULL); 49 char* buffer = new char[len + 1]; 50 WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, len,NULL,NULL); 51 buffer[len] = '\0'; 52 str.append(buffer); 53 delete[] buffer; 54 return str; 55 } 56 57 //string 转成 LPCWSTR 58 LPCWSTR stringToLPCWSTR(std::string orig) 59 { 60 size_t origsize = orig.length() + 1; 61 const size_t newsize = 100; 62 size_t convertedchars = 0; 63 wchar_t* wcstring = (wchar_t*)malloc(sizeof(wchar_t) * (orig.length() - 1)); 64 mbstowcs_s(&convertedchars, wcstring, origsize, orig.c_str(), _TRUNCATE); 65 return wcstring; 66 } 67   

 

标签:string,buffer,CString,wstring,cstr,wstr,str,互转
From: https://www.cnblogs.com/birdflying/p/18238498

相关文章

  • (PAT乙级刷题)String复读机
    题目:题解:#include<iostream>#include<map>usingnamespacestd;map<char,int>mp;intmain(){stringkey="String";stringt;cin>>t;//记录字符数量for(inti=0;i<t.size();i++){mp[......
  • Java基础——数组应用之StringBuilder类和StringBuffer类
    系列文章目录文章目录系列文章目录前言一、StringBuffer类二、StringBuffer概述三、StringBuffer方法四、StringBuilder类五、String、StringBuffer、StringBuilder的区别前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点......
  • string 字符串
    字符串不可变,但可以使用索引操作(变量接收)=len(string) 字符串中字符数量(变量接收) = string.find('x')找出字符'x'在该串中的位置(索引),(如果存在,不存在返回-1) 取出string内字符:string="h    e    l     l    o"(ind......
  • new/类/null/+/PrimitiveValue/valueOf/toString/环境/HTML 脚本元素属性
    newfunctionmyObjCreate(proto){functionF(){}F.prototype=protoreturnnewF();}functionmyNew(F,...args){letobj=myObjCreate(F.prototype)letres=F.call(obj,...args);returntypeofres==='object'&&res!==null?res:obj......
  • CF1234F Yet Another Substring Reverse
    CF1234FYetAnotherSubstringReverse状压dp+高维前缀和一个很显然的发现是最长子串长度不会超过字符集。那么如果没有这个操作,是很简单的,我们看看多了这个操作意味着什么。对于一个子串,考虑一次翻转对它的影响。在它内部的翻转肯定是没有意义的;我们一定有一个操作能将任意......
  • JavaScript-String
    JavaScript-String1.String对象的创建方式方式一:varstr=newString("李四");方式二:varstr1="李四";2.String对象的属性length:字符串的长度。varstr=newString("李四");console.log(str.length);3.String对象的方法charAt():返回在指定位置的字符。console......
  • String、StringBuilder和StringBuffer是处理字符串的三个不同的类
    在Java中,String、StringBuilder和StringBuffer是处理字符串的三个不同的类,它们各自具有不同的特点和使用场景。下面将具体分析这三个类的异同点:不可变性与可变性String:String是一个不可变的字符串,这意味着一旦一个String对象被创建,其值就不能改变。这种设计提供了值的恒定性,使......
  • JavaScript string charCodeAt() vs codePointAt() All In One
    JavaScriptstringcharCodeAt()vscodePointAt()AllInOneString.prototype.charCodeAt()vsString.prototype.codePointAt()String值的charCodeAt()方法返回0到65535之间的整数,表示给定索引处的UTF-16代码单元。取值范围:[0,2^16]2**16//655362**1......
  • c#中String和StringBuilder两个对象用户写入文件:导出操作
    在C#中,有两个主要用于字符串操作的类:String和StringBuilder。String:String类表示一个不可变的字符串。这意味着一旦创建了一个字符串对象,它的内容就不能被修改。每次对字符串进行操作(比如连接、替换、删除等),都会创建一个新的字符串对象。这可能会导致性能开销,尤其是在需要......
  • How to use JavaScript BigInt and Number.prototype.toString to handle the super l
    HowtouseJavaScriptBigIntandNumber.prototype.toStringtohandlethesuperlargeintegerproblemsAllInOne如何使用JavaScriptBigInt和Number.prototype.toStringg处理超大整数问题errorsfunctionplusOne(digits:number[]):number[]{letn=parseI......