串口常用校驗算法(累加和、異或和)
阿新 • • 發佈:2018-12-11
print style orm 余數 例如 num 位置 bit sub
1、異或和
異或和就是對數據逐一異或計算(異或結果與下一個數據異或)
下面是校驗實例
local rdbuf = "FFFF28000000000000600001000D0000000000000000000000000000000000000000000000000000000096" local fast = string.sub(rdbuf, 5, string.len(rdbuf)-2) local last = string.sub(rdbuf, string.len(rdbuf)-1, string.len(rdbuf)) local num = bit.bxor(tonumber(string.sub(fast, 1, 2), 16), tonumber(string.sub(fast, 3, 4), 16)) --異或 local length = string.len(fast) - 1 for i = 5, length, 2 do num = bit.bxor(num, tonumber(string.sub(fast, i, i+1), 16)) end if num == tonumber(last, 16) then
校驗成功
end
2、累加和
累加和也是逐一累加,但是計算不進位,所以最終結果其實是累加結果求256的余數
下面是計算實例
local cmd = 10 cmd = string.format("%02X",cmd) -- 02X 是為了保留兩位,空位置0 例如(A是0A)local fast = "18000000000000600001000200".. cmd .."00000000000000010006" local length = #fast - 1 local num = 0 for i = 1, length, 2 do num = num + tonumber(string.sub(fast, i, i+1), 16) end num = num % 256 num = string.format("%02X",num) local instruction = "FFFF" .. fast .. num print(instruction)
串口常用校驗算法(累加和、異或和)