为什么““ 0a” .to_i(16)`返回`10`?

时间:2019-02-07 06:35:39

标签: ruby

我对to_i的可选参数感到困惑。 具体而言,在此示例中,“基数”的含义及其对方法的影响:

"0a".to_i(16) #=> 10

关于调用方法的字符串,我对可选参数有麻烦。我以为返回值只是0的整数值。

1 个答案:

答案 0 :(得分:3)

简单的答案:这是因为Hexadecimal中的0aa等于Decimal中的10

base,换句话说,Radix表示数字系统中唯一数字的数量。

在十进制中,我们有09,其中10位数字代表数字。
在十六进制中,除了09外,还有16位数字,我们使用af来表示10至{ {1}}。

您可以像这样测试它:

15

换句话说,十进制中的"a".to_i(16) #=> 10 "b".to_i(16) #=> 11 "f".to_i(16) #=> 15 "g".to_i(16) #=> 0 # Because it's not a correct hexadecimal digit/number. '2c'.to_i(16) #=> 44 '2CH2'.to_i(16) #=> 44 # Extraneous characters past the end of a valid number are ignored, and it's case insensitive. 9.to_s.to_i(16) #=> 9 10.to_s.to_i(16) #=> 16 等于十六进制中的10
十六进制中的a等于十进制中的10。 (to_i的文档)

请注意,通常我们在十六进制数字之前使用16

0x

顺便说一句,您可以在Ruby中使用这些表示形式:

"0xa".to_i(16)
#=> 10
"0x100".to_i(16)
#=> 256

He x 最佳, b 初始, o 瞬时, d 理想(此{{1 }}当然是多余的,只是在某些情况下用于说明。