如何在Ruby中将八进制数转换为十进制?

时间:2010-08-18 05:04:14

标签: ruby octal

我试图找到一种使用八进制编号引用数组索引的简洁方法。如果我正在寻找八进制13的数组索引,它应该返回a[11]的值。

这就是我想要实现它的目的,但它看起来并不优雅或高效:

a = [ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62 ]

v = 13

puts a[v.to_s.to_i(8)]  # => 61
 # OR
puts a[v.to_s.oct]      # => 61

有更好的方法吗?

1 个答案:

答案 0 :(得分:6)

使用Ruby的八进制整数文字语法。在数字前面加一个0,Ruby在解析时将它转换为八进制:

v = 013 # => 11
a[v]    # => 61

如果八进制数来自外部来源,如文件,那么它已经是一个字符串,您必须像在示例中那样进行转换:

number = gets.chomp # => "13"
v = number.to_i(8)  # => 11
a[v]                # => 61