gpt4 book ai didi

c# - IPAddress.HostToNetworkOrder 与 IPv6

转载 作者:行者123 更新时间:2023-12-04 04:54:04 26 4
gpt4 key购买 nike

在 .NET IPAddress.HostToNetworkOrder() 中只能接收一个 long int(64 位)并返回一个 long。这适用于 IPv4,但 IPv6 地址是 128 位的。我发现将 IPv6 地址存储为整数的唯一方法是这样做:

BigInteger big = new BigInteger(ip.GetAddressBytes());

如何使用 BigInteger/IPv6 地址从主机顺序转换为网络顺序?

最佳答案

将 IP 地址转换为主机字节顺序的目的是让您可以使用 CPU 的普通整数类型对其进行算术运算。例如,在 IPv4 中:

network_base_address = address & (0xffffffff ^ ((1 << (32-prefix_length)) - 1)

由于 IPv6 地址很大,而且 CPU 原生类型很少有这么大,所以没想到会在 IPv6 地址上执行这种算法。

相反,您可以操作存储为 16 字节数组的原始 IP 地址(按网络字节顺序)。例如,C 宏的通常实现 IN_MULTICAST (对于 IPv4)通过位掩码 IP 地址的整数值来工作,这是 C 宏的通常实现 IN6_IS_ADDR_MULTICAST它的工作不是通过将 IP 地址视为整数,而是通过检查在字节数组中找到的 IP 地址的第一个字节。 (我知道这些信息是针对 C 的,而您的问题是关于 C#,但这是相同的想法)。

关于c# - IPAddress.HostToNetworkOrder 与 IPv6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17030926/

26 4 0
文章推荐: gwt - 如何在客户端的 GWT 中创建 contenteditable
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com