【问题标题】:Calculate checksum in Lua在 Lua 中计算校验和
【发布时间】:2021-10-18 10:00:33
【问题描述】:

我没有 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之和。计算公式如下。

SUM = 0x00 + 0x00 + 0xfe + 0x00 + 0x00 + 0x00 + 0x00 + 0x00 + 0x01 + 0x00 + 0x00 + 0x00 + 0x51 + 0x13 + 0x01 + 0x00 + XX + 0x5555,SUM = SUM_H

【问题讨论】:

    标签: lua checksum


    【解决方案1】:
    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))
    

    【讨论】:

    • 如果输入是一个字符串,如 '\x00\x00\xfe\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00'并且返回应该是 '\x57\x56' ?
    • 那么你必须使用string patterns从字符串中获取值
    • 'local someBytes = {} for b in code:gmatch(".") do str = string.format("0x%02X", string.byte(b)) table.insert(someBytes , str) 结束'
    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 2010-12-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多