VC用SERIALPORT在UNICODE环境下接收数据
VC用SERIALPORT在UNICODE环境下接收数据
在不同的电脑上试,发送同一个数值0X66,不同的电脑上接收到的数值不一样,正确应该是OX6A66,但有的是OX6A66,有的是0X5866,有的是0X5966,在每台电脑上用串口小助手接收都是正确的,都是0X66,找不到是什么原因,把程序改成不是UNICODE太麻烦了,要改的地方比较多,有哪位大侠可以帮帮忙
[解决办法]
串口就相当于一个数据流,这边进去什么,那边原样出来什么,为什么现在发送的是一个字节,接收端却要收到两个字节,这个多出来的前缀字节是谁加上去的?是谁把接收到的ASCII字符转换成Unicode字符?你这中间都有哪些环节?
[解决办法]
再说对于ASCII字符,转换成Unicode只要前面添加0x00就可以了,怎么会添上0x58、59、6A这种数字?
[解决办法]
如果发送过来的是一个字节,你这样用宽字符接收,只能把这个字节放在宽字符的低字节,高字节是未定义的
实际上现在windows内部都是基于Unicode的,但也同样支持ANSI字符数据的处理,没必要非得转换成Unicode
如果必须要转换成unicode进行后续处理的话,应该是等完整的字节流接收完毕后,再整个转换成Unicode,可以用MultiByteToWideChar函数进行转换
如果能保证发送过来的字符是纯ASCII字符,也可以在接收时先把宽字符清零,然后再用宽字符接收,如
wchar_t RXBuff = 0;