如何将WCHAR 转成 std::string???

cl781121 2009-04-27 12:01:27
RT 谢谢
...全文
3880 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
具体的看这里吧,这里有非常完整的关于WINDOWS下操作宽字符操作函数.

http://hi.baidu.com/cxwcfea/blog/item/95ddd995df8e2748d0135eda.html
  • 打赏
  • 举报
回复

何必这么麻烦呢??
一个函数就搞定了.

多字节字符和宽字符转换及操作:

宽字符函数 描述
mblen() 根据locale的设置确定字符的字节数
mbstowcs() 把多字节字符串转换为宽字符串
mbtowc()/btowc() 把多字节字符转换为宽字符
wcstombs() 把宽字符串转换为多字节字符串
wctomb()/wctob() 把宽字符转换为多字节字符

jackyjkchen 2009-04-27
  • 打赏
  • 举报
回复
我知道CString的构造函数可以转,string你试一下构造函数有没有这功能
Paradin 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hairetz 的回复:]
http://topic.csdn.net/u/20071026/10/184aa3d0-6018-4292-a37a-c00af9238d27.html

WideCharToMultiByte
[/Quote]
n
Jinhao 2009-04-27
  • 打赏
  • 举报
回复
如果仅仅是保存。用std::wstring
jame2001 2009-04-27
  • 打赏
  • 举报
回复

//Converting a WChar string to a Ansi string
std::string WChar2Ansi(LPCWSTR pwszSrc)
{
int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);

if (nLen<= 0) return std::string("");

char* pszDst = new char[nLen];
if (NULL == pszDst) return std::string("");

WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL);
pszDst[nLen -1] = 0;

std::string strTemp(pszDst);
delete [] pszDst;

return strTemp;
}
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20071026/10/184aa3d0-6018-4292-a37a-c00af9238d27.html

WideCharToMultiByte
晨星 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 hhygcy 的回复:]
引用 6 楼 jackzhhuang 的回复:
先用wcstombs转成char,再放入string中。

喜欢用这个方法,那个WideCharToMultiByte传一堆参数 烦死了
[/Quote]
那些参数都有用的。wcstombs好多都默认而已。
多几个参数关系不大的,这种函数偶一般只实现一次,然后可以用好几年,嘿嘿,就算换了公司,也可以拷贝了带走。。。
okyzx 2009-04-27
  • 打赏
  • 举报
回复
wcstombs
hhygcy 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jackzhhuang 的回复:]
先用wcstombs转成char,再放入string中。
[/Quote]
喜欢用这个方法,那个WideCharToMultiByte传一堆参数 烦死了
霍大脚 2009-04-27
  • 打赏
  • 举报
回复
试试用sstream把他写入string里
mo229mo 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jame2001 的回复:]
C/C++ code
//Converting a WChar string to a Ansi string
std::string WChar2Ansi(LPCWSTR pwszSrc)
{
int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);

if (nLen<= 0) return std::string("");

char* pszDst = new char[nLen];
if (NULL == pszDst) return std::string("");

WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL);
pszDst[nLen -1] = 0;


[/Quote]
Good
晨星 2009-04-27
  • 打赏
  • 举报
回复
WCHAR*最好还是使用wstring。
如果一定要用string,说明你有转码的需求,那也不难:你先调用转码函数把WCHAR*转化成char*,然后再放到string里面就是了。
老邓 2009-04-27
  • 打赏
  • 举报
回复
代码说话:
shared_ptr<wstring> UT2WC(const char* buf)
{
int len = MultiByteToWideChar(CP_UTF8, 0, buf, -1, NULL, 0);
if (len == 0) return shared_ptr<wstring>(new wstring(L""));

vector<wchar_t> unicode(len);
MultiByteToWideChar(CP_UTF8, 0, buf, -1, &unicode[0], len);

return shared_ptr<wstring>(new wstring(&unicode[0]));
}

shared_ptr<string> WC2UT(const wchar_t* buf)
{
int len = WideCharToMultiByte(CP_UTF8, 0, buf, -1, NULL, 0, NULL, NULL);
if (len == 0) return shared_ptr<string>(new string(""));

vector<char> utf8(len);
WideCharToMultiByte(CP_UTF8, 0, buf, -1, &utf8[0], len, NULL, NULL);

return shared_ptr<string>(new string(&utf8[0]));
}

shared_ptr<wstring> MB2WC(const char* buf)
{
int len = MultiByteToWideChar(CP_ACP, 0, buf, -1, NULL, 0);
if (len == 0) return shared_ptr<wstring>(new wstring(L""));

vector<wchar_t> unicode(len);
MultiByteToWideChar(CP_ACP, 0, buf, -1, &unicode[0], len);

return shared_ptr<wstring>(new wstring(&unicode[0]));
}

shared_ptr<string> WC2MB(const wchar_t* buf)
{
int len = WideCharToMultiByte(CP_ACP, 0, buf, -1, NULL, 0, NULL, NULL);
if (len == 0) return shared_ptr<string>(new string(""));

vector<char> utf8(len);
WideCharToMultiByte(CP_ACP, 0, buf, -1, &utf8[0], len, NULL, NULL);

return shared_ptr<string>(new string(&utf8[0]));
}
tianya0609 2009-04-27
  • 打赏
  • 举报
回复
mark.学习
jackzhhuang 2009-04-27
  • 打赏
  • 举报
回复
先用wcstombs转成char,再放入string中。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧