Ip Int.rb
This content was produced by an LLM and could include errors.
このスクリプトはIPv4アドレスの整数変換です。split('.').map(&:to_i).pack('C*') で4バイトのバイナリにし、unpack1('N') で32ビット符号なし整数(192.168.1.10 → 3232235786)を得ます。ビットシフトによる各オクテットの取り出し、pack('N').unpack('C4') による元の文字列への復元も併せて示します。DB保存や数値ソート・範囲比較に役立つ手法です。
ip_str = "192.168.1.10"
#=> "192.168.1.10"
# 文字列 → Integer
#=> nil
ip_int = ip_str.split('.').map(&:to_i).pack('C*').unpack1('N')
#=> 3232235786
first = (ip_int >> 24) & 0xFF
#=> 192
second = (ip_int >> 16) & 0xFF
#=> 168
third = (ip_int >> 8) & 0xFF
#=> 1
fourth = ip_int & 0xFF
#=> 10
ip_back = [ip_int].pack('N').unpack('C4').join('.')
#=> "192.168.1.10"
Ruby 4.0.6