1

IPv6アドレスをバイナリ表現に変換して元に戻すにはどうすればよいですか?

私はそれを数字に変換し、それを文字列に変換しようとしただけでした。

IPAddr.new('fe80::c')
# => #<IPAddr: IPv6:fe80:0000:0000:0000:0000:0000:0000:000c/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>

IPAddr.new('fe80::c').to_i
# => 338288524927261089654018896841347694604
4

2 に答える 2

3

@tadmanが指摘したように、それを数値として扱うことは意味がありません。バイナリに変換するのが理想的です。

IPv6からバイトへの変換:

IPAddr.new('fe80::c').hton
# => "\xFE\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\f"

バイトからIPv6への変換:

IPAddr::new_ntoh(_)
# => #<IPAddr: IPv6:fe80:0000:0000:0000:0000:0000:0000:000c/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>
于 2013-02-07T01:43:47.680 に答える
0

これは最も洗練された解決策ではないことは確かですが、私にとってはうまくいくようです。

 my_ip = IPAddr.new('fe80::c').to_i.to_s(16)

これにより、完全に拡張されたIPv6アドレスを16進形式で含む文字列が得られます。

次に、次の関数を使用して、16進文字列を2進に変換できます。

 def hex_to_bin(s_h) # convert readable hex to binary
     s_h.scan(/../).map { |z| z.hex.chr }.join
 end
于 2016-01-08T12:04:59.817 に答える