将IPv6地址转换为编码字符串并返回Ruby?

时间:2013-02-07 01:43:48

标签: ruby ipv6

如何将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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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
相关问题