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

时间:2016-05-31 10:33:39

标签: lua

我知道有tonans()函数,但问题是我需要转换更大的数字,如1000100110100011111010101001001001001100100101。我可以自己编写,但有没有办法将其整合到函数中?如果我在当前函数中写入它,它返回不同的数字。例如:通过wolfram alpha,我转换了#34; Something" (基数36)为二进制并得到10010011001100011001011110001100000110110101100。 如果我把它放在我的自定义函数中并转换回基数36,我会得到1Z141Z34294967295(未指定int的范围)

2 个答案:

答案 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)