1

私はRubyを学び、Binary->Decimalコンバーターを作成することを考えています。バイナリ文字列を取得し、同等の10進数に変換します。変数「x」を削除できるように、rubyの現在の反復ステップを追跡する方法はありますか?

def convert(binary_string)
    decimal_equivalent = 0
    x=0   
    binary_string.reverse.each_char do |binary|
      decimal_equivalent += binary.to_i * (2 ** x)
    x+=1
    end

   return decimal_equivalent
end
4

3 に答える 3

5

はい、非常に強力な列挙子ライブラリを使用します。

require 'enumerator'
def convert(binary_string)
  decimal_equivalent = 0
  binary_string.reverse.enum_for(:each_char).each_with_index do |binary, i|
    decimal_equivalent += binary.to_i * (2 ** i)
  end
  return decimal_equivalent
end

Array#packちなみに、、、に興味があるかもしれませんString#unpack。ビット文字列をサポートしています。また、この結果を取得するさらに簡単な方法は#to_i、たとえばを使用することです。"101".to_i(2) #=> 5

于 2009-05-03T01:44:00.797 に答える
1
binary_string.reverse.chars.each_with_index do |binary, i|
  decimal_equivalent += binary.to_i * (2 ** i)
end

または1.8.7より古いバージョンの場合:

binary_string.reverse.split(//).each_with_index do |binary, i|
  decimal_equivalent += binary.to_i * (2 ** i)
end
于 2009-05-03T00:37:50.503 に答える
0

グーグルからこの答えを見つけた人々(私のような)のために、

2進数->10進数をルビーに変換する(そしてまた元に戻す)簡単な方法は次のとおりです。

# The String.to_i function can take an argument indicating
# the base of the number represented by the string.
decimal = '1011'.to_i(2)
# => 11

# Likewise, when converting a decimal number, 
# you can provide the base to the to_s function.
binary  = 25.to_s(2)
# => "11001"

# And you can pad the result using right-justify:
binary  = 25.to_s(2).rjust(8, '0')
# => "00011001"
于 2011-12-03T13:54:47.507 に答える