.net 将IP地址转换为数字:

.net 将IP地址转换为数字:,.net,ip,ipv6,ipv4,.net,Ip,Ipv6,Ipv4,问题: 当我将IP地址192.168.115.67转换为一个数字时,是这样做的: 192*2563 + 168*2562+115*2561+67*2560 = 3232265027 或者像这样: 192*2560 + 168*2561+115*2562+67*2563 = 1131653312 我在网上找到了这两种变体,坦白地说,只要我使用相同的转换过程变体进行所有内部IP范围比较,这并不重要。 但我想从IPv4地址计算IPV6,似乎这两个变体都在web上。。。 导致不同的IPv6地址,并且

问题: 当我将IP地址192.168.115.67转换为一个数字时,是这样做的:
192*2563 + 168*2562+115*2561+67*2560 = 3232265027

或者像这样:
192*2560 + 168*2561+115*2562+67*2563 = 1131653312

我在网上找到了这两种变体,坦白地说,只要我使用相同的转换过程变体进行所有内部IP范围比较,这并不重要。 但我想从IPv4地址计算IPV6,似乎这两个变体都在web上。。。 导致不同的IPv6地址,并且只有一个是正确的。。。


我使用1131653312个变体,因为1131653312是我看到的.NET给我的变体,但是3232265027是我在C++中使用的变体,也是我在IPv6网络上发现的IPv4转换的变体,在我看到之前,我使用过.NET使用变体1131653312…< /p> < p>数字是以大的序数顺序发送的,这与它们的写入方式相同(192是最高有效字节)。因此,第一个数字是“正确”的。另一个变体是如何在一个小小的endian体系结构上解释相同的字节,从而产生.Net行为


说了这么多,我真的不确定问题是什么,所以我只能希望这篇文章能成为某种回答。

这肯定是第一篇。您可以ping并查看ping实用程序如何将其转换为a.b.c.d符号。如果要进行此转换,我建议使用表达式:
(a差异与有关。您将其存储在整数中,但不同的处理器对其整数有不同的字节顺序(大头或小头优先)但是,该数字必须通过线路输出,因此IP有一个特定的顺序,它需要传输字节。该顺序与bigendian和littleendian机器不同。

产生
3232265027
的方法应该是正确的,因为第一个数字存储在IPv6的IPv4兼容部分的最高位:

0000:0000:0000:0000:0000:ffff:AABB:CCDD

在哪里

AA=192
BB=168
CC=0
DD=1

等等


另外,IP地址中不能有
256
。每个值都是0-255。

你不能这样说,这取决于他的平台的端性。好吧,我想你可以,因为.NET并没有完全移植到很多不同的平台。但原则上,你不能这样说。@t.E.D.作为一个数字,它看起来像3232265027.第二个问题是它是如何存储在内存中的,我没有提到这一点。很好,ping实用程序证实了这一点。我不知道它是用一个普通数字工作的。问题是,(正确的)是如何工作的IPV6查找给定的IPV4。我不太了解.net跨不同硬件的情况,但是.net不支持整数的抽象字节移位吗?