如何解析ipv6地址为“八位字节”?

时间:2014-01-09 17:59:52

标签: c# ipv6

我希望能够将ipv6地址解析成八位字节。是否有类似以下内容?

IPAddress.Parse(address).GetAddressBytes()[0];
IPAddress.Parse(address).GetAddressBytes()[1];

1 个答案:

答案 0 :(得分:4)

你的意思是这样吗?

IPAddress ipv6Addr = IPAddress.Parse("FE80::0202:B3FF:FE1E:8329") ;
byte[]    octets   = ipv6Addr.GetAddressBytes() ;

string text = String.Join( "," , octets.Select( x => string.Format("0x{0:X2}", x ) ) ) ;
Console.WriteLine(text);

以上代码段将此内容写入控制台:

0xFE,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0xB3,0xFF,0xFE,0x1E,0x83,0x29

正如您所料。

编辑注意:您可能想要了解IPv6地址如何表示为 text

IPv4地址长度为32位整数(4个八位字节),使用“点分四元组”表示法在文本中表示:x.x.x.x,其中每个“x”是所讨论的八位字节的十进制值。 / p>

IPv6地址是128位(长度为16个八位字节)。规范的文本表示是以十六进制形式显示的8个16位整数,以冒号分隔:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx,尽管有许多方法可以操作它以便进行表示更紧凑。

要从评论中获得您想要的内容,您需要获取16个八位字节的数组,并将每对八位字节转换为ushort

您应该注意,文本表示是网络字节顺序中的IP地址(big-endian,唯一合适的架构,恕我直言)。英特尔芯片是小端的。你需要考虑到这一点。有关字节序和网络字节顺序的更多信息,请访问:http://en.wikipedia.org/wiki/Endianness