luat系统中的异或校验程序
--[[
异或校验
string1:输入的须交验的字符串
xordata:返回的字符串校验
]]
function BCC(string1)
local xordata = bit.bxor(string.byte(string1,1,1),string.byte(string1,2,2))
--log.info(xordata)
for i = 3,#string1 do
--xordata的数据类型为number类型
xordata = bit.bxor(xordata,string.byte(string1,i,i))
end
log.info("-----------xordata-----------",xordata)
--转换为十六进制的字符串
local crc = string.format("%x",xordata)
if(#crc == 1) then -- 不足两位的话,前面补零
crc = "0"..crc
end
return crc
end
测试
--[[
异或校验
string1:输入的须交验的字符串
xordata:返回的字符串校验
]]
function BCC(string1)
local xordata = bit.bxor(string.byte(string1,1,1),string.byte(string1,2,2))
--log.info(xordata)
for i = 3,#string1 do
--xordata的数据类型为number类型
xordata = bit.bxor(xordata,string.byte(string1,i,i))
end
log.info("-----------xordata-----------",xordata)
--转换为十六进制的字符串
local crc = string.format("%x",xordata)
if(#crc == 1) then -- 不足两位的话,前面补零
crc = "0"..crc
end
log.info(crc)
return crc
end
function read_press_com(stringAdd)
local send = "$"..stringAdd.."RP0"
local crc = BCC(stringAdd.."RP0")
local ret = string.char(0x0D)
send = send .. crc..ret
return send
end
local c = read_press_com("25")
print(c)
-- 对于“25RP0”的异或校验是“35”
[19:49:25] 虚拟机初始化完毕
[19:49:25] [I]-[-----------xordata-----------] 53.0
[19:49:25] [I]-[35]
[19:49:25] $25RP035
[19:49:25] 虚拟机已停止运行