我想转换大于64位的数字,包括256位数字从十进制到十六进制在lua。
示例:
num = 9223372036854775807
num = string.format("%x", num)
num = tostring(num)
print(num) -- output is 7fffffffffffffff
但是,如果我已经添加了一个数字,它将在下面的示例中返回一个错误:
num = 9223372036854775808
num = string.format("%x", num)
num = tostring(num)
print(num) -- error lua54 - bad argument #2 to 'format' (number has no integer representation)
有人有什么想法吗?
发布于 2022-08-25 07:39:10
我想转换大于64位的数字,包括256位数字从十进制到十六进制在lua。
如果没有像这一个这样的大整数库,这是不可能的。Lua 5.4有两种数字类型:64位有符号整数和64位浮点数,它们都限于存储任意256位整数。
您的示例中的第一个num,9223372036854775807
,只是int64界的上限(-2^63
到2^63-1
,两者都包括在内)。添加1
使Lua将其转换为float64,这可以表示比以精度为代价的数字要大得多的数字。然后留下一个不精确的浮点数,它没有Lua告诉您的“整数表示”。
您可以自己重新实现%x
,但这无助于扩展浮点数的精度/大小。您需要找到另一个数字表示形式,并找到或编写一个bigint库才能与它一起使用。备选方案有:
https://stackoverflow.com/questions/73480024
复制相似问题