在 Lua 中计算校验和

Calculate checksum in Lua

我没有Lua方面的经验,谁能帮我计算以下的校验和?

55 aa 00 00 fe 00 00 00 00 00 01 00 00 01 51 13 01 00 XX (XX 表示从 1-16 或 0x00 到 0x0f 的数字)

SUM_L和SUM_H构成了这个命令帧的校验和,是下划线数据和0x5555之和。计算公式如下

总和 = 0x00 + 0x00 + 0xfe + 0x00 + 0x00 + 0x00 + 0x00 + 0x00 + 0x01 + 0x00 + 0x00 + 0x00 + 0x51 + 0x13 + 0x01 + 0x00 + XX + 0x5555,总和 = SUM_H <<8 + SUM_L(SUM_L代表SUM的低8位,而SUM_H代表SUM的高8位

local someBytes = {0x55, 0xaa, 0x00, 0x00, 0xfe} -- and so forth
function checksum(bytes)
  local SUM = 0
  for _,v in ipairs(bytes) do
    SUM = SUM + v
  end

  SUM = SUM + 0x5555

  local SUM_H = (SUM & 0xFF << 8) >> 8
  local SUM_L = SUM & 0xFF
  return SUM_H, SUM_L
end

local highByte, lowByte = checksum(someBytes)
print(string.format("High Byte:\t0x%02X\nLow Byte:\t0x%02X", highByte, lowByte))