问题描述
串口通信中,把读到的十六进制字节拼接成字节数组以后,转换成字符串以后出现乱码(多了一个?)
现象
int len = TVPort.Read(receiveData2, 0, 17);
string lastSN = System.Text.Encoding.UTF8.GetString(receiveData2.Take(len).ToArray());
预期结果:IDK153513J-00516
实际结果:IDK153513J-00516?
原因分析:
原先以为是编码方式错误,尝试了修改成不同方式
string SN = System.Text.Encoding.Default.GetString(receiveData2.Take(len).ToArray());
string test = System.Text.Encoding.ASCII.GetString(receiveData2.Take(len).ToArray());
string test2=System.Text.Encoding.GetEncoding("gb2312").GetString(receiveData2.Take(len).ToArray());
结果是:被坑了,接口的人没有说明数据是怎么合成的,数据位最后一个是通过其他算法计算的CRC,那个字节数值在ASCII里面是不可见的
总结:方法没问题,但是需要了解数组的有效数字构成,不然会浪费很多时间