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

Di1*_*997 2 lua

我知道有 tonumber() 函数,但问题是我需要转换更大的数字,如1000100110100011111010101001001001001100100101. 我可以自己写,但是有没有办法将它集成到函数中?如果我在当前函数中写它,它会返回不同的数字。例如:通过 wolfram alpha,我将“Something”(base 36)转换为二进制文件并得到10010011001100011001011110001100000110110101100. 如果我把它放在我的自定义函数中并转换回 base 36,我得到1Z141Z34294967295(未分配整数的范围)

lhf*_*lhf 7

在 Lua 5.3 中,tonumber工作正常:

Lua 5.3.2  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> tonumber("1000100110100011111010101001001001001100100101",2)
37834277032741
> tonumber("10010011001100011001011110001100000110110101100",2)
80920602611116
Run Code Online (Sandbox Code Playgroud)


Pig*_*let 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)
Run Code Online (Sandbox Code Playgroud)