Lua CRC16-MODBUS校验函数

该文章展示了一个用Lua编写的CRC16-MODBUS校验函数,函数通过处理输入字符串,进行位操作计算CRC值,并返回校验码。在给定的示例中,函数正确计算了字符串的CRC值并输出。

使用lua语言编写的CRC16-MODBUS校验函数:

function calc_crc(string)
    if string.len(string) % 2 ~= 0 then
        string = '0' .. string
    end
    data = {}
    i = 1
    while i <= string.len(string) do
        byte = string.sub(string, i, i + 1)
        table.insert(data, tonumber(byte, 16))
        i = i + 2
    end
    crc = 0xFFFF
    for _, pos in ipairs(data) do
        crc = bit.bxor(crc, pos)
        for i = 1, 8 do
            if bit.band(crc, 1) ~= 0 then
                crc = bit.rshift(crc, 1)
                crc = bit.bxor(crc, 0xA001)
            else
                crc = bit.rshift(crc, 1)
            end
        end
    end
    -- 修改格式化字符串将低8位放在前面
    hex_crc = string.format("%04X", crc):sub(3, 4) .. string.format("%04X", crc):sub(1, 2)
    return hex_crc -- 返回CRC校验码
end

使用案例:

local str = "01032000218DD800013875010C63080000005A000003E80000005900000CCB00001388"
local crc = calc_crc(str)
print(crc) 

输出结果:

 比对显示无误(注意校验结果的高低位)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值