我知道有tonans()函数,但问题是我需要转换更大的数字,如1000100110100011111010101001001001001100100101
。我可以自己编写,但有没有办法将其整合到函数中?如果我在当前函数中写入它,它返回不同的数字。例如:通过wolfram alpha,我转换了#34; Something" (基数36)为二进制并得到10010011001100011001011110001100000110110101100
。
如果我把它放在我的自定义函数中并转换回基数36,我会得到1Z141Z3
或4294967295
(未指定int的范围)
答案 0 :(得分:4)
在Lua 5.3中,tonumber
工作正常:
Lua 5.3.2 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> tonumber("1000100110100011111010101001001001001100100101",2)
37834277032741
> tonumber("10010011001100011001011110001100000110110101100",2)
80920602611116
答案 1 :(得分:2)
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)