2013-02-07 23 views
0

如何将IPv6地址转换为二进制表示并返回?将IPv6地址转换为编码字符串并返回到Ruby?

我只能将它转换为数字,然后尝试将其转换为字符串。

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

正如@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> 
+0

与地址的二进制表示处理是有意义的。将它表示为一个数字并不是真的。 – tadman

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 
相关问题