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

ami*_*irm 1 c# ipv6

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

IPAddress.Parse(address).GetAddressBytes()[0];
IPAddress.Parse(address).GetAddressBytes()[1];
Run Code Online (Sandbox Code Playgroud)

Nic*_*rey 5

你的意思是这样?

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);
Run Code Online (Sandbox Code Playgroud)

上面的代码片段将其写入控制台:

0xFE,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0xB3,0xFF,0xFE,0x1E,0x83,0x29
Run Code Online (Sandbox Code Playgroud)

正如您所料。

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

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

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

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

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