[英]LUA 5.4 - How to convert 64-bit numbers to hex
我想在 lua 中将大于 64 位的数字(包括最多 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)
有没有人有任何想法?
我想在 lua 中将大于 64 位的数字(包括最多 256 位的数字从十进制转换为十六进制)。
好吧,如果不涉及像这个这样的大型 integer 库,这是不可能的。 Lua 5.4 有两种数字类型:64 位有符号整数和 64 位浮点数,它们都被限制为存储任意 256 位整数。
您示例中的第一个 num 9223372036854775807
只是 int64 边界的上限( -2^63
到2^63-1
,包括两者)。 对此加1
会强制 Lua 将其转换为 float64,它可以表示比精度大得多的数字。 然后你会留下一个不精确的浮点数,它没有“整数表示”,因为 Lua 告诉你。
您可以自己轻松地重新实现%x
,但这无助于您扩展浮点数和整数的精度/大小。 您需要找到另一个数字表示,并使用它找到或写入 go 的 bigint 库。 选项是:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.