我有这个字节“\ x01 \ x01 \ x00 \ x00 \ x00 \ x01 \ x23”包 我需要发送它的校验和, 我还有校验和“\ x01 \ x01 \ x00 \ x00 \ x00 \ x01 \ x23 \ xDA”的数据包, 但我不知道如何计算此数据包或其他数据包的校验和,任何帮助! 谢谢
答案 0 :(得分:3)
如果您想在此处获得快速回复,您应该更清楚地描述您的问题。即使在Neil向您询问校验和之后,您也没有清楚地描述校验和算法是如何工作的。
SEEMS 获取校验和的方法是
将数据包分成字节
"\x01\x01\x00\x00\x00\x01\x23"
=> [1, 1, 0, 0, 0, 1, 35]
计算所有字节的总和=> 38
,即0x26
0xDA
这可能是一个解决方案:
packet = "\x01\x01\x00\x00\x00\x01\x23"
bytes = packet.bytes
sum = bytes.reduce(:+)
checksum = [ -sum ].pack('c')
packet_with_checksum = packet + checksum
如果在连接步骤中遇到编码错误,则可能需要packet.force_encoding('ASCII-8BIT')
(或在checksum
上)。