WRT 下 C++ wstring, string, String^ 互转

本文详细探讨了C++中wstring与string之间的互转过程,特别是中文字符处理时可能出现的乱码问题及解决策略。通过具体实例展示了如何正确实现这两种类型之间的转换,确保数据的准确性和兼容性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于项目原因,需要引入C++。

wstring 与 string 的互转研究了一段时间,坑主要在于使用下面这种方式进行转换,中文会乱码

wstring ws = L"这是一段测试文字";
string s;
s.assign(ws.begin(), ws.end());

因此采用了下面的方法将wstring 转为 string

            wstring wstr = L"这是一段测试文字";
            string str;
            int wstr_len = wstr.length();
            int str_len = wstr_len * sizeof(wchar_t);
            str.resize(str_len);
            int new_len = WideCharToMultiByte(CP_ACP,0,(LPCWSTR)wstr.c_str(),wstr_len,(LPSTR)str.c_str(),str_len,NULL,NULL);
            str.resize(new_len);

类似的 string转为wstring 为

            int str_len = s.length();//这里的s是上述办法转下来的string
            wstring wstr;
            wstr.resize(str_len);

            int new_len = MultiByteToWideChar(CP_ACP,0,(LPSTR)s.c_str(),str_len,(LPWSTR)wstr.c_str(),str_len);
            wstr.resize(new_len);

wstring 转为 String^ 的方法为

auto ps = ref new String(wstr.c_str());

String^ 转为 wstring 的方法为

wstring wstr(ps->Data());

 

转载于:https://www.cnblogs.com/newcj/p/3645741.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值