将二进制转换为十进制 - 结果太大

时间:2015-08-17 15:39:20

标签: ruby

我正在尝试实现我自己的将二进制转换为十进制的方法,并且我遵循以下计算二进制字符串101的十进制值的示例:

  

101 => 1 * 2 ^ 2 + 0 * 2 ^ 1 + 1 * 2 ^ 0 => 1 * 4 + 0 * 2 + 1 * 1 => 4 + 1 => 5

我的方法是

def to_decimal binary
  num_array = binary.to_s.split('').map(&:to_i)

  puts num_array.inject { |dec, num| dec + num * 2**(num_array.length-1) }
end

这似乎适用于1001 9,但100111010会在33给出set opt(adhocRouting) DSR or set opt(rp) DSR or set val(rp) DSR 时给予No 26.我试图查明这一点,但我发现了一些不同的方法来解决这个问题,他们只是让我更加困惑。

1 个答案:

答案 0 :(得分:2)

而不是:

num_array.inject{ |dec, num| dec + num * 2**(num_array.length-1) }

你的意思是这个(乘以当前功率,从最低功率到最高功率构建小数):

 num_array.reverse!
 num_array.each_index.inject(0){ |dec, index| dec + num_array[index] * 2**index }
相关问题