串口常用校驗算法(累加和、異或和)


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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM