memo.log

技術情報の雑なメモ

【Ruby】数値と文字列の変換メモ

文字列→数値

基本形 
> "10".to_i
=> 10

整数とみなせない文字があればそこまでを変換対象とします。変換対象が空文字列であれば 0 を返します。
> "a".to_i 
=> 0

基数の指定が可能(レシーバの文字列を基数の数値と解釈して返却する)
> "10".to_i(2) 
=> 2 
> "10".to_i(16) 
=> 16
> "0x10".to_i(0) 
=> 16

数値→文字列

0 - 31 の制御文字の場合は表現できないので、16進数で表示されるみたい ord で戻せる

そのまま文字にする
irb(main):068:0> 1.to_s 
=> "1" 
irb(main):069:0> 01.to_s 
=> "1" 
irb(main):070:0> 0x10.to_s 
=> "16"
> 10.to_s(16)
=> "a"

エンコーディング
irb(main):054:0> 1.chr 
=> "\x01" 
irb(main):055:0> 65.chr 
=> "A" 
irb(main):056:0> 65.chr.encoding 
=> #<Encoding:US-ASCII> 
irb(main):057:0> 64.chr.encoding 
=> #<Encoding:US-ASCII> 
irb(main):058:0> 64.chr 
=> "@" 
irb(main):059:0> 63.chr 
=> "?" 
irb(main):060:0> 48.chr 
=> "0" 
irb(main):061:0> 31.chr 
=> "\x1F"
> 63.chr.ord 
=> 63
> p 10.chr Encoding::ASCII_8BIT # 文字コード指定
"\n"
irb(main):080:0> "kkk".length
=> 3
irb(main):081:0> "\x12\x12".length
=> 2
> "\x65\x01\x41".chars 
=> ["e", "\u0001", "A"]
irb(main):085:0> "kkk".chars 
=> ["k", "k", "k"] 
irb(main):086:0> "\x65".chars 
=> ["e"] 
irb(main):087:0> "\x65\x01".chars 
=> ["e", "\u0001"] 
irb(main):088:0> "\x65\x01\x64".chars 
=> ["e", "\u0001", "d"] 
irb(main):089:0> "\x65\x01\x14".chars 
=> ["e", "\u0001", "\u0014"] 
irb(main):090:0> "\x65\x01\x41".chars 
=> ["e", "\u0001", "A"]

irb(main):042:0> 10.chr
=> "\n"
irb(main):043:0> 10.chr.ord
=> 10
irb(main):044:0> 10.chr.ord.chr
=> "\n"
irb(main):045:0> 10.chr.ord.to_s
=> "10"
irb(main):046:0> 10.chr.ord.to_s(16)
=> "a"

irb(main):053:0> 121.chr
=> "y"
irb(main):054:0> 0x79.chr
=> "y"

参考

String#to_i (Ruby 3.0.0 リファレンスマニュアル)