1/11/2012

Ruby で16進数文字列をドット区切り10進数文字列に変換する

例えば、0xdeadbeef を表す文字列 "deadbeef" をドット区切りの10進数文字列に変換したい場合、Array#pack と String#unpack を使ってできる。
> ["deadbeef"].pack("H*").unpack("C*").join(".")
=> "222.173.190.239"
数値リテラルの 0xdeadbeef をドット区切りの10進数文字列に変換したい場合は、Fixnum#to_s を使って16進数文字列に変換すれば、上で書いた方法でドット区切りの10進数文字列に変換できる。
> [0xdeadbeef.to_s(16)].pack("H*").unpack("C*").join(".")
=> "222.173.190.239"
手元の Ruby  のバージョンはこちら。もっといい方法あるのかな。に、しても、Array#pack と String#unpack は便利だなー。
$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553)

0 件のコメント:

コメントを投稿