我正在通过串口与机器通信。协议通信规范的一部分指出控制和是“来自<'PS'>(包括)的字节的算术和,<'data'>到<'CS'>”
数据包消息的结构如下:
<'PS'><'data'><'CS'>,其中:
< 'PS' > - 数据包大小
长度:1
值:0x02至0x63
最大数据包长度为99字节
< '数据' > - 数据
长度:1 ... 90字节
值:0x00 - 0xFF
数据部分的长度取决于命令。
< 'CS' > - 检查总和
长度 - 1个字节
值:0x00 - 0xFF
示例:
ACK数据包:0x02 0x01 0x03 其中0x03是校验和。
那么如何在C ++中计算这些字节的校验和呢?
答案 0 :(得分:1)
看起来校验和是一个简单的总和,模数为256。
int sum = 0;
for (int j = 0; j < number_of_bytes_in_message; ++j)
sum += message [j];
sum %= 256; // or, if you prefer sum &= 255;
答案 1 :(得分:1)
使用无符号8位类型(uint8_t或unsigned char)作为累加器,在生成数据包时将每个字节添加到它,然后将其作为校验和字节发送。究竟如何取决于您打算如何构建数据包。