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