转换的IP地址到一个数字:
问题: 当我的IP地址192.168.115.67转换成一个数字,它是这样完成的:
192 * 256 + 168 * 256 +115 * 256 + 67 * 256 = 3232265027
或这样的:
192 * 256 0 + 168 * 256 + 115 * 256 2 + 67 * 256 = 1131653312
我在网上找到了两种变种,坦白地说,只要我使用相同的转换过程变体进行所有内部IP范围比较,这并不重要。 但我想从IPv4地址计算IP V6,看起来两个变种都在网上... 导致不同的IPv6地址,只有一个可以正确...
我使用1131653312变体,因为1131653312是我看到.NET给出的变体,但是3232265027是我在C++中使用的变体,也是我在Web上发现的用于IPv4到IPv6转换的变体,以及之前我使用过的变体我看到.NET使用变种1131653312 ...转换的IP地址到一个数字:
导致3232265027
的方法应该是正确的,如在第一号被存储在IPv6中的IPv4兼容性部的最高位:
0000:0000:0000:0000:0000:FFFF:AABB: CCDD
其中
AA = 192
BB = 168
CC = 0
DD = 1
等
http://wikipedia.org/wiki/IPv6
而且,你不能有一个IP地址的256
。值是每个0 - 255。
数字在网络上以big-endian顺序发送,与写入方式相同(192是最重要的字节)。因此,第一个数字是“正确的”。另一个变体是如何在一个小端架构上解释相同的字节,因此.Net行为。在说了这么多之后,我真的不确定这个问题是什么,所以我只能希望这个博览会构成各种答案。
它绝对是第一个。您可以ping通并查看ping实用程序如何将其转换为a.b.c.d表示法。如果你打算做这种转换,我推荐使用表达式:(a << 24) | (b << 16) | (c << 8) | d
与endianness的区别在于。您将它存储在一个整数中,但不同的处理器对于它们的整数具有不同的字节顺序(首先大或小)。但是,这个数字必须超出界限,因此IP具有特定的顺序,它需要传输字节。该顺序看起来不同于生物传感器和小型机器。
我不太了解.NET跨越不同的硬件,但是不是.net提供了整数抽象字节转换? – 2012-06-09 01:12:46
问题是,(正确的)IP v6如何查找给定的IP v4。 – 2010-05-28 11:39:47
窘境,修改你的答案以说清楚。 – 2010-05-28 11:46:03