0

我正在通过串行与机器通信。协议通信规范的一部分指出,控制和是“从 <'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++ 中计算这些字节的校验和呢?

4

2 回答 2

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;
于 2010-01-06T16:28:37.953 回答
1

使用无符号 8 位类型(uint8_t 或无符号字符)作为累加器,在生成数据包时将每个字节添加到其中,然后将其作为校验和字节发送。具体如何取决于您打算如何构建数据包。

于 2010-01-06T16:29:44.717 回答