免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3449 | 回复: 3
打印 上一主题 下一主题

[C++] 请问 C++ 中如何把 string 类型的字符串转换成 wstring 类型的字符串? [复制链接]

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-18 20:47 |只看该作者 |倒序浏览
是不是有个转换函数,而且和 locale 设置有关,
但是下面的代码中 locale 设置好像无效 ?


  1.         locale loc("chs");

  2.         char narrow[] = "你好 hello";

  3.         wchar_t wide_cpp[100];

  4.         memset(wide_cpp, 0, sizeof(wide_cpp));

  5.         (use_facet<ctype<wchar_t> >(loc)).widen(narrow, narrow + strlen(narrow), wide_cpp);
复制代码

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
2 [报告]
发表于 2006-10-19 20:41 |只看该作者

回复 1楼 zhujiang73 的帖子

没人知道吗?

论坛徽章:
0
3 [报告]
发表于 2006-10-19 21:33 |只看该作者
原帖由 zhujiang73 于 2006-10-18 20:47 发表
是不是有个转换函数,而且和 locale 设置有关,
但是下面的代码中 locale 设置好像无效 ?

[code]
        locale loc("chs");

        char narrow[] = "你好 hello";

        w ...





wchar * _wcspcpy(wchar *dest, const wchar *src);
这个C函数就可以啊

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
4 [报告]
发表于 2006-10-20 20:45 |只看该作者

回复 1楼 zhujiang73 的帖子


  1. #include <locale>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <clocale>
  5. #include <iostream>
  6. #include <string>
  7. #include <sstream>

  8. char             narrow[100];
  9. wchar_t          word[100];
  10. const char      *from = narrow;
  11. const char      *nstart = narrow;
  12. wchar_t         *to = 0;
  13. wchar_t         *wstart = word;
  14. mbstate_t         cs;
  15. std::wstring     my_wstr;


  16. int main( )
  17. {
  18.         std::locale::global(std::locale(""));

  19.         snprintf(narrow, 99, "%s", "12 测试 abc 你好");

  20.       
  21.         std::use_facet< std::codecvt<wchar_t, char, mbstate_t> >(std::locale("")).in(cs, nstart, nstart+strlen(narrow), from, wstart,wstart+100, to );

  22.         my_wstr = word;

  23.         std::wcout << L"word = " << word << std::endl;
  24.         std::wcout << L"my_wstr = " << my_wstr << std::endl;

  25.         std::wcout << L"wcslen word = "  << wcslen(word) << std::endl;
  26.        
  27.         return 0;
  28. }
复制代码


成了,在我的 debian
上面,不过上面的代码是我参考了一些资料后照猫画虎而成。还是没全懂,继续研究。

参考资料:
http://book.77169.com/data/web5603/20050228/20050228__3334439.html
http://www.tacc.utexas.edu/services/userguides/pgi/pgC++_lib/stdlibug/sta_9169.htm
http://www.cantrip.org/locale.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP