6

问题:当我将IP地址192.168.115.67转换为数字时,是这样完成的:
192*256 3 + 168*256 2 +115*256 1 +67*256 0 = 3232265027

还是这样:
192*256 0 + 168*256 1 +115*256 2 +67*256 3 = 1131653312

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

我使用 1131653312 变体,因为 1131653312 是我看到 .NET 给我的变体,但 3232265027 是我在 C++ 中使用的变体,这也是我在网上找到的用于 IPv4 到 IPv6 转换的变体,并且我在看到 .NET 使用变体 1131653312 之前使用过它...

4

4 回答 4

5

这绝对是第一个。您可以 ping 并查看 ping 实用程序如何将其转换为 abcd 表示法。如果您要进行此转换,我建议您使用表达式:(a << 24) | (b << 16) | (c << 8) | d

于 2010-05-28T10:57:17.280 回答
4

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

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

在哪里

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

等等

https://wikipedia.org/wiki/IPv6

此外,您不能拥有256一个 IP 地址。值分别为 0 - 255。

于 2010-05-28T10:59:42.827 回答
0

数字通过线路以大端顺序发送,这与它们的写入方式相同(192 是最高有效字节)。因此,第一个数字是“正确”的数字。另一个变体是如何在 little-endian 架构上解释相同的字节,因此是 .Net 行为。

说了这么多,我真的不确定问题是什么,所以我只能希望这个阐述构成某种答案。

于 2010-05-28T10:56:43.723 回答
0

区别与字节顺序有关。您将它存储在一个整数中,但不同的处理器对其整数有不同的字节顺序(大端或小端优先)。但是,该数字必须通过线路输出,因此 IP 具有需要传输字节的特定顺序。该顺序看起来与 bigendian 和 littleendian 机器不同。

于 2010-05-28T10:58:41.513 回答