奇数校验和结果 - 未收到预期结果

时间:2015-12-07 17:29:13

标签: lua checksum

我一直在尝试根据文件头生成校验和,并且收到了相互矛盾的结果。在从属设备手册中,它指出了以下内容以生成校验和:

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

  1. 计算单个字节中的标头字节总和。或者计算 总和,然后与FFhex的结果。
  2. 校验和= FFhex - 步骤1中的总和。“
  3. 在这里,我在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
    

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

    • 241(按照您的意愿发送字符串)
    • 0(每个字节更改为十六进制,然后发送到函数)

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

    有人可以告诉我我在做什么有什么问题;要么写的代码,我的方法,还是两者兼而有之?

1 个答案:

答案 0 :(得分:2)

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