社区
C语言
帖子详情
如何将wchar_t的类型转成char的类型?
legumer
2006-05-22 09:43:46
在论坛上搜索了好多,都做过尝试,但似乎无法获得正确的数据。望能做详细点的说明。谢谢。
...全文
767
20
打赏
收藏
如何将wchar_t的类型转成char的类型?
在论坛上搜索了好多,都做过尝试,但似乎无法获得正确的数据。望能做详细点的说明。谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
char
与w
char
_t(T
CHAR
)之间的相互转换
char
与w
char
_t(T
CHAR
)之间的相互转换 1、w
char
_t
类型
数据的初始化
char
类型
数据的初始化就不再骜述了;只说一下w
char
_t
类型
的初始化: w
char
_t[] = L"我是w
char
_t
类型
的数据"; //w
char
_t
类型
数据初始化时前面需加上宏L 2、
char
与w
char
_t之间的转换
char
与w
char
_t
类型
数据之间的转换不能通过赋值的方...
w
char
_t与
char
转换
C++标准中,w
char
_t是宽字符
类型
,每个w
char
_t
类型
占2个字节,16位宽。汉字的表示就要用到w
char
_t 。
char
,我们都知道,占一个字节,8位宽。其实知道了这个以后,要在w
char
_t 和
char
两种
类型
之间转换就不难实现了。w
char
_t 转换为
char
的代码如下: 有如下的w
char
_t和
char
变量:w
char
_t w_cn = 中;
char
c_
w
char
_t
类型
和
char
16_t,
char
32_t
w
char
_t 程序需要处理的字符集可能无法用一个8位字节表示,如日文汉字系统。对于这种情况,我们将
char
定义为一个16位的字节或更长的字节。其次,一种实现可以同时支持一个小型基本字符集和一个较大的扩展字符集。8位
char
可以表示基本字符集,另一种w
char
_t(宽字符
类型
)可以表示扩展字符集。w
char
_t
类型
是一种整数
类型
,它有足够长的空间,可以表示系统使用的最大扩展字符集。这种
类型
与另一种...
【C++】w
char
_t* 与
char
* 字符串的转换
//w
char
_t*转
char
*字符串
char
* W
char
To
Char
(const w
char
_t* wp) {
char
*m_
char
; int len= (int)Wide
Char
ToMultiByte(CP_ACP,0,wp, (int)wcslen(wp),NULL,0,NULL,NULL); m_
char
=new
char
[len+1]; Wide
Char
ToMultiByte(CP_ACP,0,wp, (int)wcslen(wp),m_
char
,len,NULL,N
char
与w
char
_t相互转换
1、w
char
类型
初始化 w
char
_t* wc = L"这是 w
char
测试"; 2、w
char
_t* 转
char
*
char
* w
char
2
char
(const w
char
_t* w
char
) {
char
* m_
char
; int len= Wide
Char
ToMultiByte( CP_ACP ,0,w
char
,wcslen( w
char
),...
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章