我想转换大于64位的数字,包括lua中从十进制到十六进制的256位数字。
示例:
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)
有人有什么想法吗?
我想转换大于64位的数字,包括lua中从十进制到十六进制的256位数字。
如果不涉及像这样的大整数库,这是不可能的。Lua5.4有两种数字类型:64位有符号整数和64位浮点,这两种数字都被限制为存储任意256位整数。
示例中的第一个数字9223372036854775807
只是int64边界(-2^63
到2^63-1
,包括两者(的上限。将1
添加到其中会迫使Lua将其转换为float64,float64可以以精度为代价表示比float64大得多的数字。然后你会留下一个不精确的浮点;整数表示";正如Lua告诉你的那样。
您可以自己简单地重新实现%x
,但这无助于扩展浮点运算的精度/大小;int。你需要找到另一个数字表示,并找到或编写一个bigint库。选项包括:
- 字符串表示:将数字表示为十六进制或字节字符串(以256为基数(
- 表表示法:将数字表示为数字列表(以2^x为基数,其中x为<64(