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

3

我试图以八进制编码的方式引用数组的索引。如果我要查找八进制 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

有更好的方法吗?


你需要使用那个数字来访问数组这一事实并不重要。因此,我从标签和标题中删除了所有有关数组的提及。 - P Shved
抱歉,我不确定是否可能有关于数组索引的独特内容可以访问。这对我来说是非常新的领域!感谢您纠正我的错误。 - arriflex
事实是,我认为很明显没有编程语言会有所影响 :-) - P Shved
1个回答

8

使用Ruby的八进制整数字面量语法。在数字前面放置一个0,Ruby会在解析时把它转换为八进制:

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

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

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

太好了!这就是我想要的!谢谢。 - arriflex
对于社会安全号码和其他以零开头的情况来说,这是一个完全的陷阱。 :) - Jed Schneider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接