C#串口通信校验和计算不符:结果与预期值差异求助
串口通信校验和计算问题
我正在开发一款与通信设备建立串口连接的应用,当前在实现校验和计算流程时遇到问题,无法得到预期值。测试代码如下:
public static void GetCheckSum() { // test data1 // the desired checksum value(correct answer) : 61 // This data gives 61 // var hexInput = "43-33-30-30-20-20-20-20-20-20-20-32-03"; // test data2 // the desired checksum value(correct answer) : 42 var hexInput = "54-33-30-30-20-20-20-20-38-2E-30-03"; byte[] byteData = hexInput.Split("-").Select(hex => Convert.ToByte(hex)).ToArray(); byte checkSumTest = new byte(); for (int i = 0; i < byteData.Length; i++) { checkSumTest = (byte)(checkSumTest ^ byteData[i]); } Console.WriteLine(checkSumTest); }
问题细节
- 测试数据1的预期校验和为61,代码计算结果符合预期;
- 测试数据2包含
2E,使用Convert.ToByte(hex)时抛出System.FormatException: 'Input string was not in a correct format.'异常; - 修改为
Convert.ToByte(hex, 16)后异常解决,但计算结果为66,与预期值42不符。
问题分析与解决
1. 解析异常的原因
Convert.ToByte(hex)默认按十进制解析字符串,2E不是合法的十进制数值,因此必须指定16进制解析规则(Convert.ToByte(hex,16)),这一步修改是正确的。
2. 校验和结果不符的核心排查
你当前得到的66是十进制值,对应十六进制42,这里大概率存在进制误解:设备文档中标注的预期值42可能是十六进制,而非十进制。如果是这种情况,你的代码计算结果完全正确。
如果设备确实预期十进制42(十六进制2A),则说明你使用的异或算法与设备协议不匹配,需要按以下方向排查:
- 确认算法类型:串口设备常用的校验和算法包括异或、8位累加和(模256取余)、CRC8等,必须严格匹配设备协议定义;
- 确认计算范围:部分设备会排除帧头、帧尾等特殊字节(比如测试数据中的
03可能是结束符,不需要参与计算)。
3. 针对性修改示例
若设备使用8位累加和(模256)
public static void GetCheckSum() { var hexInput = "54-33-30-30-20-20-20-20-38-2E-30-03"; byte[] byteData = hexInput.Split("-").Select(hex => Convert.ToByte(hex, 16)).ToArray(); int checkSumTest = 0; foreach (byte b in byteData) { checkSumTest += b; } // 取低8位作为校验和 checkSumTest &= 0xFF; Console.WriteLine(checkSumTest); }
若设备要求排除最后一个字节(结束符03)计算异或
public static void GetCheckSum() { var hexInput = "54-33-30-30-20-20-20-20-38-2E-30-03"; byte[] byteData = hexInput.Split("-").Select(hex => Convert.ToByte(hex, 16)).ToArray(); byte checkSumTest = 0; // 仅计算前11个字节 for (int i = 0; i < byteData.Length - 1; i++) { checkSumTest ^= byteData[i]; } Console.WriteLine(checkSumTest); }
关键建议
串口通信的校验和规则完全由设备协议决定,优先查阅设备的通信文档确认算法和计算范围。若无文档,可通过多组设备发送的数据包反推算法:对比数据差异与校验和差异,判断是异或还是累加和类型,再验证计算范围。
内容的提问来源于stack exchange,提问作者BTOM
相关产品推荐
相关产品推荐

