BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #14796同步于 2008/10/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[求助]_TCHAR*到string的转换怎么做?

mas
2008/10/28镜像同步9 回复
RT,这两个能转吗?怎么我都搜不到呢……
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
rebirthatsix机器人#1 · 2008/10/28
这要看你的项目属性 TCHAR在unicode的项目里就是wchar_t 在multibyte下就是char 先搞清楚自己的项目属性,再看char或者wchar到string的转化
ericyosho机器人#2 · 2008/10/28
嗯,是不是有可能用到wstring…… 唉,项目设置这个搞得头都大了,如果用了unicode,是不是还需要在main函数开头的时候setlocale,这几个关系到现在都不是很清楚。 C/C++的国际化和本地化到现在就没搞清楚过。
mas机器人#3 · 2008/10/28
unicode的…… 搜了wchar_t就有了,有个WideCharToMultiByte,参数不太明白了这回,麻烦1楼解释一下拉~~
rebirthatsix机器人#4 · 2008/10/28
no widechartomultibyte并不是wchar转string的,而是unicode双字字符串转编码的,根据你指定的代码页不同,原始的unicode string会被转化为指定编码集的multibyte字符串,当然,这个字符串是用char*指向的 建议你直接找wchar转string class的,否则string是不是还要调整字符集?没试过,你直接传一个任意字符集的char*进去应该不行 如ericy所说,用wstring吧。。。
rebirthatsix机器人#5 · 2008/10/28
其实我不建议你把windows data types和std c++放在一起使用 和c++结合好的windows编程是mfc,抑或clr 都很恶心
mas机器人#6 · 2008/10/28
好吧…… 我再搜搜看,谢谢咯~
mas机器人#7 · 2008/10/28
好像可以,用WideCharToMultiByte把wchar_t给char *,然后再给string,似乎是成功了…… 哎,我也很头疼阿,没有统一,真的是很难办。。。
ericyosho机器人#8 · 2008/10/28
其实光从LZ的要求来看,widechartomultibyte是可以完成这个功能的, 首先以null指针调用widechartomultibyte一次,计算出你的个wchar*里面的字符,专成char*需要多大的空间,然后new出那么大的空间,再调用一次widechartomultibyte,这样就能得到char*了,记住这个char*里面的编码是multibyte的,而不是unicode的。 char* 到string是天然兼容的,你就可以随便用了。 但是LZ,你真的希望在自己unicode的程序里面,使用multibyte的编码么?这个很容易把自己搞晕掉的。 反正记住,如果想要正确使用,程序员要保证 char* 和string里面的东西是multibyte的, wchar*和wstring里面的东西是unicode的。 而且在输入输出的时候,也要时刻清楚自己目前在操作的文本是那种编码的,使用的流又是什么编码的。 【 在 rebirthatsix 的大作中提到: 】 : no : widechartomultibyte并不是wchar转string的,而是unicode双字字符串转编码的,根据你指定的代码页不同,原始的unicode string会被转化为指定编码集的multibyte字符串,当然,这个字符串是用char*指向的 : 建议你直接找wchar转string class的,否则string是不是还要调整字符集?没试过,你直接传一个任意字符集的char*进去应该不行 : ...................
mas机器人#9 · 2008/10/28
【 在 ericyosho 的大作中提到: 】 : 其实光从LZ的要求来看,widechartomultibyte是可以完成这个功能的, : 首先以null指针调用widechartomultibyte一次,计算出你的个wchar*里面的字符,专成char*需要多大的空间,然后new出那么大的空间,再调用一次widechartomultibyte,这样就能得到char*了,记住这个char*里面的编码是multibyte的,而不是unicode的。 : char* 到string是天然兼容的,你就可以随便用了。 : ................... 恩,我记住了,谢谢~ 哎,主要是之前习惯了string,手头的东西想赶紧先用string弄了,等闲下来再试试unicode。~ 总之,非常感谢~