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

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

最佳答案

你的意思是这样吗?

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地址表示为文本:


http://tools.ietf.org/html/rfc5952
http://tools.ietf.org/search/rfc1924


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

IPv6地址为128位(长度为16个八位位组)。规范的文本表示形式是十六​​进制形式的8个16位整数,用冒号分隔:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx,尽管可以通过多种方式来进行操作以进行表示更紧凑。

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

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

关于c# - 如何将ipv6地址解析为“八位字节”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21027735/

10-10 02:46