如何将wchar_t的类型转成char的类型?

legumer 2006-05-22 09:43:46
在论坛上搜索了好多,都做过尝试,但似乎无法获得正确的数据。望能做详细点的说明。谢谢。
...全文
767 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
adintr 2006-05-22
  • 打赏
  • 举报
回复
常量汉字 WideCharToMultiByte 肯定没问题,要不然微软可以喝西北风了。。。
adintr 2006-05-22
  • 打赏
  • 举报
回复
另,文件本来也有各种编码之分的, utf8, ansi, unicode 等等...
所以,从文件读入一个 wchar_t 挺玄
sharpdew 2006-05-22
  • 打赏
  • 举报
回复
如果你的 fgetwc 读入的本来就是 Multibyte, 再用 WideCharToMultiByte 转换当然就是乱码了。
另外你说读入后 wprintf 能输出正确的中文,不知道你怎么输出的? 据我的印象, wprintf 是无法输出 wchar_t 的中文的(英文可以),可能你读出来的本来就是 multibyte.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
相信楼主还不会笨到不用一个常量汉字来测试吧,非得要从输入获取,呵呵!
sharpdew 2006-05-22
  • 打赏
  • 举报
回复
一个汉字对应一个16位整数,unicode 手册上是用16进制表示的,手册描述很详细。
sharpdew 2006-05-22
  • 打赏
  • 举报
回复
谢谢楼上的。汉字的整数编码表,该如何获取?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
你不是要看生成的wchar_t对不对吗,实际上就是汉字的unicode码,到unicode.org下载unicode 4.1文档上有。
legumer 2006-05-22
  • 打赏
  • 举报
回复
嗯。非常有可能。因为我是参考这里的http://blog.itpub.net/admin.php?op=editPost&postId=38387。所以,我应该调用MultiByteToWideChar来实现。
adintr 2006-05-22
  • 打赏
  • 举报
回复
如果你的 fgetwc 读入的本来就是 Multibyte, 再用 WideCharToMultiByte 转换当然就是乱码了。
另外你说读入后 wprintf 能输出正确的中文,不知道你怎么输出的? 据我的印象, wprintf 是无法输出 wchar_t 的中文的(英文可以),可能你读出来的本来就是 multibyte.
legumer 2006-05-22
  • 打赏
  • 举报
回复
嗯。对啊。是不一定是wchar_t类型的。那应该也没什么问题啊。
adintr 2006-05-22
  • 打赏
  • 举报
回复
看了下 MSDN, fgetwc 读入的不一定是 wchar_t 啊:
Wide-character version of fgetc. Reads c as a multibyte character or a wide character according to whether stream is opened in text mode or binary mode.
adintr 2006-05-22
  • 打赏
  • 举报
回复
感觉是你的 fgetwc 有问题。。。
legumer 2006-05-22
  • 打赏
  • 举报
回复
谢谢楼上的。汉字的整数编码表,该如何获取?
sharpdew 2006-05-22
  • 打赏
  • 举报
回复
如果用c输出的话,你就输出unsigned short整型数,对照一下汉字的整数编码,看一看结果对不对就知道了。
sharpdew 2006-05-22
  • 打赏
  • 举报
回复
比如文件里有这样一个表达式,a=你好,我用fgetwc取出数据,用wprintf能打印出“你好”,但使用WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wt_string, -1, chr_temp, sizeof(wt_temp), NULL, NULL ); 后,打印chr_temp时,就是“??o?”,类似于这种。不知是什么问题?望指教。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
打印wchar_t或者wstring,你要使用wcout呀,也就是宽字节流,用cout等只是针对char型流的!
legumer 2006-05-22
  • 打赏
  • 举报
回复
我使用的是c。不是c++,#include <ATLCONV.h>,似乎有问题。
fdimim 2006-05-22
  • 打赏
  • 举报
回复
...汉字本来就只能是宽字符,双字节表示的。 你用char当然显示不出来的了。
legumer 2006-05-22
  • 打赏
  • 举报
回复
比如文件里有这样一个表达式,a=你好,我用fgetwc取出数据,用wprintf能打印出“你好”,但使用WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wt_string, -1, chr_temp, sizeof(wt_temp), NULL, NULL ); 后,打印chr_temp时,就是“??o?”,类似于这种。不知是什么问题?望指教。
zhuan 2006-05-22
  • 打赏
  • 举报
回复
用ATL库吧,好用一些

#include <ATLCONV.h>
.....
USES_CONVERSION;
wt_temp = W2A(wt_string);
adintr 2006-05-22
  • 打赏
  • 举报
回复
把你要转换的是什么,转换后要什么贴出来看看吗
legumer 2006-05-22
  • 打赏
  • 举报
回复
我使用的是,WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wt_string, -1, chr_temp, sizeof(wt_temp), NULL, NULL );

但获得的一些乱码,wt_string为wchar_t类型,wt_temp为char[]。
adintr 2006-05-22
  • 打赏
  • 举报
回复
WideCharToMultiByte

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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