首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LUA 5.4 -如何将64位数字转换为十六进制

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

Stack Overflow用户
提问于 2022-08-24 22:16:16
回答 1查看 141关注 0票数 0

我想转换大于64位的数字,包括256位数字从十进制到十六进制在lua。

示例:

代码语言:javascript
运行
复制
num = 9223372036854775807
num = string.format("%x", num)
num = tostring(num)
print(num) -- output is 7fffffffffffffff

但是,如果我已经添加了一个数字,它将在下面的示例中返回一个错误:

代码语言:javascript
运行
复制
num = 9223372036854775808
num = string.format("%x", num)
num = tostring(num)
print(num) -- error lua54 - bad argument #2 to 'format' (number has no integer representation)

有人有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-25 07:39:10

我想转换大于64位的数字,包括256位数字从十进制到十六进制在lua。

如果没有像这一个这样的大整数库,这是不可能的。Lua 5.4有两种数字类型:64位有符号整数和64位浮点数,它们都限于存储任意256位整数。

您的示例中的第一个num,9223372036854775807,只是int64界的上限(-2^632^63-1,两者都包括在内)。添加1使Lua将其转换为float64,这可以表示比以精度为代价的数字要大得多的数字。然后留下一个不精确的浮点数,它没有Lua告诉您的“整数表示”。

您可以自己重新实现%x,但这无助于扩展浮点数的精度/大小。您需要找到另一个数字表示形式,并找到或编写一个bigint库才能与它一起使用。备选方案有:

  • 字符串表示:将数字表示为十六进制或字节字符串(基数256)。
  • 表表示:将数字表示为数字列表(基数为2^x,其中x< 64)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73480024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档