LUA 5.4-如何将64位数字转换为十六进制



我想转换大于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^632^63-1,包括两者(的上限。将1添加到其中会迫使Lua将其转换为float64,float64可以以精度为代价表示比float64大得多的数字。然后你会留下一个不精确的浮点;整数表示";正如Lua告诉你的那样。

您可以自己简单地重新实现%x,但这无助于扩展浮点运算的精度/大小;int。你需要找到另一个数字表示,并找到或编写一个bigint库。选项包括:

  • 字符串表示:将数字表示为十六进制或字节字符串(以256为基数(
  • 表表示法:将数字表示为数字列表(以2^x为基数,其中x为<64(

最新更新