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

Odd Checksum Result(s) - Not Receiving Expected Results

我一直在尝试根据文件 header 生成校验和,但收到的结果相互矛盾。在从设备手册中,它声明以下内容来生成校验和:

》对header校验和使用简单的eight-bit计算,所需步骤如下:

  1. 计算单个字节中header个字节的总和。或者计算 求和,然后用 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 个字节)字符串 print(header_checksum("0181B81800")),我会得到以下结果:

在给出的示例中,它声明字节应该是 AD,即 173(dec) 或 \255。

有人可以告诉我我在做什么有什么问题吗?编写的代码、我的方法或两者兼而有之?

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