10進数,16進数,2進数変換

仕事でちょくちょく変換を行うので,スクリプトを用意しています.結果はたぶ んあっています^^;)


dec2bin.rb

#!/usr/bin/ruby

dec = ARGV[0].to_i
bin = []
i = 0

while dec >= 1
  bin[i] = dec % 2
  dec /= 2
  i += 1
end

print bin.reverse, "\n"

dec2hex.rb

#!/usr/bin/ruby

dec = ARGV[0].to_i
hex = []
i = 0

while dec >= 1
  hex[i] = dec % 16
  dec /= 16
  i += 1
end

for j in 0..hex.size
  case hex[j]
  when 10
    hex[j] = "A"
  when 11
    hex[j] = "B"
  when 12
    hex[j] = "C"
  when 13
    hex[j] = "D"
  when 14
    hex[j] = "E"
  when 15
    hex[j] = "F"
  end
end

print hex.reverse, "\n"

bin2dec.rb

#!/usr/bin/ruby

bin = ARGV[0].split(//).reverse
dec = 0

for i in 0...bin.size
  dec += bin[i].to_i * 2**i
end

print dec, "\n"

hex2dec.rb

value = ARGV[0].split(//).reverse
result = 0

for i in 0...value.size
  if value[i] =~ /[0-9]/
    value[i] = value[i].to_i
  elsif
    case value[i]
      when "a"
        value[i] = 10
      when "b"
        value[i] = 11
      when "c"
        value[i] = 12
      when "d"
        value[i] = 13
      when "e"
        value[i] = 14
      when "f"
        value[i] = 15
    end
  end
  result += value[i]*16**i
end

puts result

bin2hex.rb

#!/usr/bin/ruby

bin = ARGV[0].split(//).reverse
dec = 0

for i in 0...bin.size
  dec += bin[i].to_i * 2**i
end

hex = []
i = 0

while dec >= 1
  hex[i] = dec % 16
  dec /= 16
  i += 1
end

for j in 0..hex.size
  case hex[j]
  when 10
    hex[j] = "A"
  when 11
    hex[j] = "B"
  when 12
    hex[j] = "C"
  when 13
    hex[j] = "D"
  when 14
    hex[j] = "E"
  when 15
    hex[j] = "F"
  end
end

print hex.reverse, "\n"



実行する場合には、Ktermなどのターミナルから

$ ruby dec2bin.rb 123456

のように入力します.


Back