奇偶校验和结果异常 - 收到的结果与预期不符。

我一直在尝试基于文件头生成校验和,但结果却是矛盾的。在从设备的手册中,它声明了以下生成校验和的方法:

“头部校验和使用简单的8位计算。所需步骤如下:

  1. 计算单字节头部字节的和。或者,先计算和,然后将结果与FFhex相与。
  2. 校验和=FFhex-步骤1中的总和。”

在这里,我用Lua创建了以下代码:

function header_checksum(string)
    local sum = 0
    for i = 1, #string do
       sum = sum + string.byte(i)
    end
    local chksum = 255 - (sum & 255)
    return chksum
end

如果我将以下(4 x byte)字符串发送到print(header_checksum("0181B81800")),我会得到以下结果:

  • 241(字符串按您看到的那样发送)
  • 0(每个字节都被转换为十六进制,然后发送给函数)

在给定的示例中,它声明该字节应为AD,即173(十进制)或\255。

请问有人能告诉我我做错了什么,是代码的问题,还是我的方法有问题,或者两者都有问题吗?

点赞
用户1847592
用户1847592
# 计算头部校验和

该函数接收一个参数 header,表示头部信息。函数中通过循环遍历 header 字符串,依次累加每个字符的 ASCII 码值的负数(即 sum = sum - header:byte(i))。最后将结果对 256 取余数,并返回。

使用示例:调用 header_checksum 函数,并传入参数 string.char(0x01,0x81,0xB8,0x18,0x00),输出结果为 173
function header_checksum(header)
   local sum = -1
   for i = 1, #header do
      sum = sum - header:byte(i)
   end
   return sum % 256
end

print(header_checksum(string.char(0x01,0x81,0xB8,0x18,0x00))) --> 173
2015-12-07 18:46:26