Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IPAddress.HostToNetworkOrder与IPv6_C#_Ip_Ip Address_Ipv6_Biginteger - Fatal编程技术网

C# IPAddress.HostToNetworkOrder与IPv6

C# IPAddress.HostToNetworkOrder与IPv6,c#,ip,ip-address,ipv6,biginteger,C#,Ip,Ip Address,Ipv6,Biginteger,在.NET IPAddress.HostToNetworkOrder()中,只能接受长整数(64位)并返回长整数。这对于IPv4很好,但IPv6地址是128位。我发现将IPv6地址存储为整数的唯一方法是: BigInteger big = new BigInteger(ip.GetAddressBytes()); 如何使用BigInteger/IPv6地址将主机顺序转换为网络顺序?将IP地址转换为主机字节顺序的目的是,您可以使用CPU的正常整数类型对其执行算术运算。例如,在IPv4中: net

在.NET IPAddress.HostToNetworkOrder()中,只能接受长整数(64位)并返回长整数。这对于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)
network\u base\u address=address&(0xffffffff^)((1我猜出来了

IPAddress ip = IPAddress.Parse("{IP ADDRESS}");
List<Byte> ipFormat = ip.GetAddressBytes().ToList();
ipFormat.Reverse();
ipFormat.Add(0);
BigInteger ipAsInt = new BigInteger(ipFormat.ToArray());
IPAddress ip=IPAddress.Parse(“{ip ADDRESS}”);
List ipFormat=ip.GetAddressBytes().ToList();
ipFormat.Reverse();
ipFormat.Add(0);
BigInteger ipAsInt=新的BigInteger(ipFormat.ToArray());

IP地址不转换为主机顺序或从主机顺序转换。它们具有固定的格式,并且不会随CPU的尾数而改变。@dtb那么.NET中的IPAddress.HostToNetworkOrder()方法的意义是什么?重点是:如果主机顺序中有短/int/long(小尾数或大尾数,取决于CPU)然后可以使用此方法将其转换为网络订单(big-endian)。如果您不知道是否需要,那么您可能不需要。谢谢,我也有同样的需要。干得好!有些网络地址库仍然无法解析带有子网掩码的IP地址,或者无法处理从子网(尤其是IPv6)获取最低和最高范围的问题,这有点可怜。