如何将二进制转换成十进制(LUA)

我知道有tonumber()函数,但问题是我需要转换较大的数字,比如1000100110100011111010101001001001001100100101。我可以自己写,但是否有一种方法将其集成在函数中?如果我在当前函数中写入,它会返回不同的数字。例如:通过 Wolfram Alpha,我将“ Something”(基数36)转换为二进制并得到10010011001100011001011110001100000110110101100。 如果我将其放入自定义函数并转换回基数36,我将获得1Z141Z34294967295(未分配int的范围)

点赞
用户2858170
用户2858170

Lua 从版本 5.3 开始支持 64 位整数。你的 Lua 版本是否是最新的?

打开 http://www.lua.org/cgi-bin/demo,并执行这个快捷而简陋的转换。结果与你引用的 Wolfram Alpha 数字匹配。

local dec = 80920602611116

local bin = "10010011001100011001011110001100000110110101100"

bin = string.reverse(bin)
local sum = 0

for i = 1, string.len(bin) do
  num = string.sub(bin, i,i) == "1" and 1 or 0
sum = sum + num * math.pow(2, i-1)

end

print(sum)
2016-05-31 11:22:28
用户107090
用户107090

在 Lua 5.3 中,tonumber 可以正常工作:

Lua 5.3.2  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> tonumber("1000100110100011111010101001001001001100100101",2)
37834277032741
> tonumber("10010011001100011001011110001100000110110101100",2)
80920602611116
2016-05-31 13:17:04