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

Lua 5.4如何将超64位(最高256位)十进制数转为十六进制?

Lua中256位以内十进制大数字转十六进制的解决方法

Lua的原生整数类型(Lua 5.4+)为64位有符号整数,最大值为9223372036854775807。当数值超过这个范围时,无法用number类型精确存储(会转为浮点数并丢失精度),直接调用string.format("%x")会因参数不是有效整数而报错。

解决思路:
由于大数字无法用原生数值类型处理,需以字符串形式存储十进制数,手动实现十进制字符串到十六进制字符串的转换算法。核心逻辑是通过字符串模拟除法,反复将十进制数除以16,记录余数,最终将余数逆序拼接得到十六进制结果。

具体实现代码

首先实现字符串除以16的辅助函数,用于获取商和余数:

function divide_by_16(decimal_str)
    local quotient = ""
    local remainder = 0
    local has_non_zero = false
    for i = 1, #decimal_str do
        local digit = tonumber(decimal_str:sub(i, i))
        local current = remainder * 10 + digit
        local q = math.floor(current / 16)
        remainder = current % 16
        if q ~= 0 or has_non_zero then
            quotient = quotient .. tostring(q)
            has_non_zero = true
        end
    end
    return quotient == "" and "0" or quotient, remainder
end

然后实现主转换函数:

function decimal_to_hex(decimal_str)
    -- 去除前导零
    decimal_str = decimal_str:gsub("^0+", "")
    decimal_str = decimal_str == "" and "0" or decimal_str
    
    local hex_digits = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}
    local result = {}
    
    while decimal_str ~= "0" do
        decimal_str, rem = divide_by_16(decimal_str)
        table.insert(result, hex_digits[rem + 1])
    end
    
    return #result == 0 and "0" or table.concat(result):reverse()
end

测试示例

-- 测试64位最大值
print(decimal_to_hex("9223372036854775807")) -- 输出:7fffffffffffffff

-- 测试超过64位的数值
print(decimal_to_hex("9223372036854775808")) -- 输出:8000000000000000

-- 测试256位最大值(2^256 - 1)
print(decimal_to_hex("115792089237316195423570985008687907853269984665640564039457584007913129639935"))
-- 输出:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

注意事项

  • 输入必须是十进制数字字符串,不能直接传入超出范围的number类型(否则会提前丢失精度)。
  • 函数支持处理0到2^256-1之间的所有十进制数,满足最高256位的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:27:29