You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Lua中编写脚本将BCD格式转换为整数?

BCD转整数的Lua实现

根据你提供的BCD数组和预期结果,这里的BCD编码是低位字节在前,且每个字节的低4位对应十进制低位数字、高4位对应十进制高位数字。以下是实现脚本:

local function bcdToInteger(bcdArray)
    local numStr = ""
    -- 倒序遍历字节数组,从低位到高位处理
    for i = #bcdArray, 1, -1 do
        local byte = bcdArray[i]
        -- 提取低4位数字
        local lowDigit = bit.band(byte, 0x0F)
        -- 提取高4位数字
        local highDigit = bit.rshift(byte, 4)
        -- 拼接数字字符串,先加低位再高位
        numStr = numStr .. tostring(lowDigit) .. tostring(highDigit)
    end
    -- 转换为整数,自动去除前导零
    return tonumber(numStr)
end

-- 测试你的BCD数组
local bcdArray = {0x73, 0x31, 0x30, 0x00}
local result = bcdToInteger(bcdArray)
print(result) -- 输出:31337

版本兼容说明

  • Lua 5.1及更早版本需手动引入bit库(LuaJIT自带,或使用第三方库luabitop);Lua 5.3+内置位操作函数,可直接替换:
    • bit.band 替换为 band
    • bit.rshift 替换为 rshift

兼容多版本的代码如下:

local function bcdToInteger(bcdArray)
    local numStr = ""
    -- 适配不同Lua版本的位操作函数
    local band, rshift = bit.band or bit32.band or band, bit.rshift or bit32.rshift or rshift
    for i = #bcdArray, 1, -1 do
        local byte = bcdArray[i]
        local lowDigit = band(byte, 0x0F)
        local highDigit = rshift(byte, 4)
        numStr = numStr .. tostring(lowDigit) .. tostring(highDigit)
    end
    return tonumber(numStr)
end

内容的提问来源于stack exchange,提问作者FaceHoof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:10:07