1

我有格式的onr协议

\003LLCCDDDD..DDXX
  • LL:不包括注意字节的总包长度。
  • CC:命令代码。
  • DD:数据字节(十六进制 ASCII)。
  • XX:LLCCDDDD..DD 的校验和(不包括注意字节和校验和本身)。校验和是命令包中 ASCII 字符的简单 8 位总和。

这是一个例子:

Command:    “\0030611C8”    (Length=6, command=0x11, checksum=0xC8)

我只想知道校验和是如何得出的 0xC8 thnx :)

4

2 回答 2

5

正如您对协议所述的描述,校验和是不是注意字节或校验和的字节的总和。您总共有 7 个字节的传输:

'\003', '0', '6', '1', '1', 'C', '8'

其中,\003是注意字节,因此它不包含在校验和中。同样,最后两个字符校验和,不包括在内。您的示例只剩下 4 个字符:

'0', '6', '1', '1'

将这些字符转换为它们的十六进制表示(检查ASCII 表)以使它们更易于添加,得到以下结果:

0x30, 0x36, 0x31, 0x31

然后将这些值相加并得到:

0xC8

这就是你要找的答案!

于 2012-09-06T05:18:52.443 回答
1

这是我的猜测:

你校验和目标代码是 0611

让我们这样做:

ASCII(0) = 48,ASCII(6) = 54,ASCII(1) = 49;

得到 4 个 ASCII 的总和是 200 = 0xC8

于 2012-09-06T05:27:35.500 回答