我一直在尝试根据文件头生成校验和,并且收到了相互矛盾的结果。在从属设备手册中,它指出了以下内容以生成校验和:
“标头校验和使用简单的8位计算。所需步骤如下:
在这里,我在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字节)字符串,我会得到以下结果:
在给出的示例中,它指出该字节应为AD
,即173(十进制)或\ 255。
有人可以告诉我我在做什么有什么问题;要么写的代码,我的方法,还是两者兼而有之?
答案 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