Ruby RangeError:bignum太大,无法转换为'long';

Ruby RangeError:bignum太大,无法转换为'long';,ruby,irb,bignum,Ruby,Irb,Bignum,当我在irb中运行此代码时,以下错误消息就是输出。当我用python编译相同的逻辑时,它工作得非常好。我在谷歌上搜索了“RangeError:bignum太大,无法转换为‘long’”:但没有找到相关的答案。 请帮帮我:(提前谢谢 试试这个 num = "0000001000000000011000000000000010010011000011110000000000000000" for n in 0...num.length temp = num[n] dec = dec

当我在irb中运行此代码时,以下错误消息就是输出。当我用python编译相同的逻辑时,它工作得非常好。我在谷歌上搜索了“RangeError:bignum太大,无法转换为‘long’”:但没有找到相关的答案。 请帮帮我:(提前谢谢

试试这个

num = "0000001000000000011000000000000010010011000011110000000000000000"
for n in 0...num.length 
   temp = num[n] 
   dec =  dec + temp*(2**(num.length - n - 1))
end
puts dec
试试这个

num = "0000001000000000011000000000000010010011000011110000000000000000"
for n in 0...num.length 
   temp = num[n] 
   dec =  dec + temp*(2**(num.length - n - 1))
end
puts dec

使用
num[n]
得到的是一个单字符字符串,而不是一个数字。我将您的代码改写为更为惯用的Ruby,如下所示:

RangeError: bignum too big to convert into
long'
        from (irb):4:in
*' from (irb):4:in
block in irb_binding'
        from (irb):2:in
each' from (irb):2 from C:/Ruby193/bin/irb:12:in `'
然而,最惯用的可能是
num.to_i(2)
,因为在我看来,您正在尝试从二进制转换为十进制,这正是它所做的。

使用
num[n]
得到的是一个单字符字符串,而不是一个数字。我将您的代码重新编写为更惯用的Ruby,它看起来是这样的:

RangeError: bignum too big to convert into
long'
        from (irb):4:in
*' from (irb):4:in
block in irb_binding'
        from (irb):2:in
each' from (irb):2 from C:/Ruby193/bin/irb:12:in `'
然而,最惯用的可能是
num.to_i(2)
,因为在我看来,您正在尝试从二进制转换为十进制,这正是它所做的。

+1带有索引的每个字符对我来说是一个非常好的模式,所以谢谢您。请注意,
。带有索引的每个字符作为一个单独的方法是在1.9中添加的,之前只有
带有索引的每个字符
+1带有索引的每个字符这是一个非常好的模式——对我来说是新的,所以谢谢。请注意,
。在1.9中添加了作为单独方法的
索引,在此之前,只有
索引的每个\u
。正如我在下面所说的,Ruby以
num.to\u I(2)
:-)的形式内置了这个函数。正如我在下面所说的,Ruby以
num.to\u I(2)
:-)的形式内置了这个函数