簡體   English   中英

LUA 5.4 - 如何將 64 位數字轉換為十六進制

[英]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^632^63-1 ,包括兩者)。 對此加1會強制 Lua 將其轉換為 float64,它可以表示比精度大得多的數字。 然后你會留下一個不精確的浮點數,它沒有“整數表示”,因為 Lua 告訴你。

可以自己輕松地重新實現%x ,但這無助於您擴展浮點數和整數的精度/大小。 您需要找到另一個數字表示,並使用它找到或寫入 go 的 bigint 庫。 選項是:

  • 字符串表示:將數字表示為十六進制或字節字符串(基數 256)。
  • 表格表示:將數字表示為數字列表(以 2^x 為底,其中 x < 64)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM