免费注册 查看新帖 |

Chinaunix

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

[C] MultiByteToWideChar()函数返回值不同? [复制链接]

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-21 10:19 |只看该作者 |倒序浏览

  1. //unsigned char str[4]={0xAA,0x01,0x38,0};
  2.   unsigned char str[4]={0x7A,0x01,0x38,0};
  3.   len=MultiByteToWideChar(CP_ACP,0,str,-1,0,0);
复制代码
由于数组中的第一个元素值不同,而MultiByteToWideChar的返回值就不同了(返回值分别为3和4),我想返回4应该是正确的,但由于第一个元素值不同而导致返回值不同,这是为什么?
我测试了一下,将第一个元素分别改为0x8A,0x9A,0xAA...返回值都为3;其中原因是什么?

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
2 [报告]
发表于 2012-09-21 10:25 |只看该作者
客户端发送十六进制的数,我要将每个字节转换成UNICODE格式(也就是将每个字符占一个字节转换为每个字节占用两个字节),
客户端发送过来的数据后,先获得字节数的个数,结果就发现:
如果客户端发送0xAA,0x01,0x38,0  服务器端得到3个字节数;
如果客户端发送0x7A,0x01,0x38,0  服务器端得到4个字节数;
所以就这个问题有些困惑?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
3 [报告]
发表于 2012-09-21 10:34 |只看该作者
0xAA,0x01被当作一个汉字处理了吧

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
4 [报告]
发表于 2012-09-21 10:38 |只看该作者
回复 3# hellioncu


    我目的想将0xAA,0x01分别处理;

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
5 [报告]
发表于 2012-09-21 10:47 |只看该作者
hellioncu 发表于 2012-09-21 10:34
0xAA,0x01被当作一个汉字处理了吧

我也在想是不是这里MultiByteToWideChar用的有问题,但又想知道这其中的缘由.

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
6 [报告]
发表于 2012-09-21 10:55 |只看该作者
楼主编码白痴吧...

你先说明你原先的字节流是什么编码的, 然后说明里面有没有非ASCII字符, 最后我告诉你为什么返回值不同.

光速 发表于 2012-09-21 10:25
客户端发送十六进制的数,我要将每个字节转换成UNICODE格式(也就是将每个字符占一个字节转换为每个字节占用两 ...

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
7 [报告]
发表于 2012-09-21 10:59 |只看该作者
回复 6# linux_c_py_php


   原先是 ANSI  , unsigned char类型的字符串

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
8 [报告]
发表于 2012-09-21 11:05 |只看该作者
你的意思就是里面没有中文?

光速 发表于 2012-09-21 10:59
回复 6# linux_c_py_php

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
9 [报告]
发表于 2012-09-21 11:15 |只看该作者
linux_c_py_php 发表于 2012-09-21 11:05
你的意思就是里面没有中文?

我不知道0xAA,0x01是不是表示一个中文,我现在就是想将0xAA,0x01两个字节分开表示,然后转换为UNICODE,0x00,0xAA,0x00,0x01;
我想知道是不是MultiByteToWideChar函数就将中文字符(两个字节)表示为1.
可能是我对MultiByteToWideChar函数理解不够,希望能指出我哪里理解错了.

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
10 [报告]
发表于 2012-09-21 11:27 |只看该作者
本帖最后由 linux_c_py_php 于 2012-09-21 11:27 编辑

0XAA一定不是ASCII, 你....

我只能汗了...

先搞清楚原先的字节流是什么编码的, 然后再告诉我你的需求.

你以为你想让一个字节变成宽字符UNICODE它就变了吗... 那个字节是GBK/UTF8的ASCII单字节是可以的, 如果是UTF8/GBK的多字节字符, 你就取其中一个字节, 你让编码转化库怎么识别?  太雷人了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP