读书人

MultiByteToWideChar回来字符数组的长

发布时间: 2012-10-11 10:16:10 作者: rapoo

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;其中原因是什么?

[解决办法]
楼主到底知不知道ANSI字符串和UNICODE字符串的区别?
在使用MultiByteToWideChar函数前,你该先清楚它转化前和转化后的字符串都是什么玩意吧?

在一个ANSI字符串中,一个范围为0x80~0xFF的char,代表它和它后面的char共两个字节表示一个多字节字符
一般为了避免歧义,多字节字符都要求“两个字节必须都位于0x80~0xFF内”,至于该多字节字符究竟对应哪个字符,要看使用的是哪种语言哪个标准的多字节字符集
例如“测试1”这个字符串,如果用国标GB_2312标准的ANSI多字节字符串表示,不算结束符'、0'的话就是5个字节:“测”为0xB2 0xE2, “试”为0xCA 0xD4, “1”为0x31

char str[4]={0xAA,0x01,0x38,0},这个四字节字符数组包含三个所要表示的字符:0xAA 0x01, 0x38, 0x00
char str[4]={0x7A,0x01,0x38,0}, 这个四字节字符数组包含四个所要表示的字符:0x7A, 0x01, 0x38, 0x00

读书人网 >C语言

热点推荐