如何在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替换为bandbit.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
相关产品推荐
相关产品推荐

