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 地址。

然后可以使用以下函数将十六进制字符串转换为二进制:

 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 回答