首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MultiByteToWideChar回到字符数组的长度不一样

2012-10-21 
MultiByteToWideChar返回字符数组的长度不一样?C/C++ code//unsigned char str[4]{0xAA,0x01,0x38,0}uns

MultiByteToWideChar返回字符数组的长度不一样?

C/C++ code
//unsigned char str[4]={0xAA,0x01,0x38,0};  unsigned char str[4]={0x7A,0x01,0x38,0};  len=MultiByteToWideChar(CP_ACP,0,str,-1,0,0);

由于数组中的第一个元素值不同,而MultiByteToWideChar的返回值就不同了(返回值分别为3和4),按道理返回4应该是正确的,但由于第一个元素值不同而导致返回值不同,这是为什么?
我测试了一下,将第一个元素分别改为0x8A,0x9A,0xAA...返回值都为3;其中原因是什么?

[解决办法]
比如说 '啊' 的内码是 0xaa01,而 'a'是 0x7a,'b'是0x1,那你的0xaa01就是'啊',0x7a01就是"ab",明白了?
[解决办法]
Return Values
Returns the number of WCHAR values written to the buffer indicated by lpWideCharStr if successful. If the function succeeds and cchWideChar is 0, the return value is the required size for the buffer indicated by lpWideCharStr. 
'啊'是一个wchar,'ab'是两个wchar
[解决办法]
填的值不一样,可能会导致半个汉字的问题
[解决办法]
// ACSII字符集只到 0x7F
// 超过0x7F的,系统都会认为是扩展字符集,两个字节表示一个字符。
// {0xAA,0x01,0x38,0}; 系统认为是 "0xaa, 0x01" 和 “0x38”两个字符
[解决办法]
// 原始字符集不同。
// CP_ACP,是当前系统字符集,中文操作系统一般是GB2312
// 28591,437不知道是什么字符集,msdn上应该有说明
[解决办法]
探讨

// 原始字符集不同。
// CP_ACP,是当前系统字符集,中文操作系统一般是GB2312
// 28591,437不知道是什么字符集,msdn上应该有说明

热点排行