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;其中原因是什么?
[解决办法]楼主到底知不知道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