n進数の操作
基数指示子
基数指示子を先頭につけると、それぞれ 10 進法以外の記数法で整数値を書くことができる。
ただし、実行時は 10 進数に変換されて表示される。
# 2進数
p 0b11111111 # => 255
# 8進数
p 0377 # => 255 (一般的な書き方)
p 0o377 # => 255 (通常は使用しない)
# 10進数
p 0d255 # => 255 (通常は使用しない)
# 16進数
p 0xff # => 255
文字列 -> 数値変換
String#to_i
- 文字列を 10 進数表現された整数であると解釈して、整数に変換する。
- 整数とみなせない文字がある場合はそこまでを変換対象とする。
- 変換対象が空文字、
nil
の場合は0
を返す。
to_i(n)
のように引数に基数を指定できる。(= n 進数への変換)n
には0
,2
~36
の整数を指定できる。n
に0
を指定した場合は、変換対象の接頭辞から基数を判定する。
# 2進数
p "01".to_i(2) # => 1
p "0b1".to_i(2) # => 1
p "0b11111111".to_i(0) # => 255
# 8進数
p "07".to_i(8) # => 7
p "0o7".to_i(8) # => 7
p "0377".to_i(0) # => 255
p "0o377".to_i(0) # => 255
# 10進数
p "09".to_i(10) # => 9
p "0o9".to_i(10) # => 9
p "0d255".to_i(0) # => 255
# 16進数
p "0f".to_i(16) # => 15
p "0xf".to_i(16) # => 15
p "0xff".to_i(0) # => 255
String#hex
- 文字列を 16 進数で数値が表現されていると解釈して整数に変換する。
- 接頭辞
0x
,0X
および_
は無視される。
p "10".hex # => 16
p "ff".hex # => 255
p "0x10".hex # => 16
p "-0x10".hex # => -16
p "1_0".hex # => 16
p "".hex # => 0
- 文字列が
[_0-9a-fA-F]
以外を含む時はその文字以降を無視する
String#oct
- 文字列を 8 進数で数値が表現されていると解釈して、整数に変換する。
- 接頭辞 (
0
,0b
,0B
,0x
,0X
) に応じて 8 進数以外も変換する。
p "10".oct # => 8
p "010".oct # => 8
p "0b10".oct # => 2
p "0x10".oct # => 16
p "-0b10".oct # => -2
p "-0x10".oct # => -16
- 文字列が
[_0-9a-fA-F]
以外を含む時はその文字以降を無視する
注意
String#binary
は存在しない。