【问题标题】:How would you compare two IP addresses to see which one is greater?您将如何比较两个 IP 地址以查看哪个更大?
【发布时间】:2010-09-08 05:58:45
【问题描述】:

例如,以下是两组 IP 地址,现在,您将如何识别每组的更大 IP?

A组:

10.192.3.177 和 10.192.2.204

B组:

10.192.3.205 和 10.192.2.204

谢谢!!

【问题讨论】:

  • 如何比较两个复数,看看哪个更大? (很抱歉在这里没有回答您的问题,它已经得到了回答,只是必须指出,就其本身而言,这样的结构是不可比的​​>,除非你提供一个定义来这样做)

标签: ip-address ip


【解决方案1】:

如果将它们转换为 32 位整数,则较大的整数将是较大的整数。换句话说:

10.192.3.177 -> 0x0ac003b1 (180,356,017) (bigger)
10.192.2.204 -> 0x0ac002cc (180,355,788)

10.192.3.205 -> 0x0ac003cd (180,356,045) (bigger)
10.192.2.204 -> 0x0ac002cc (180,355,788)

我很难想象一个重要的用例,但如果我必须签入一个程序,我会采用这种方法。

【讨论】:

  • 不确定,但我怀疑 OP 正在尝试对某些数据结构的地址进行排序。
【解决方案2】:

您可能应该澄清“更大”的含义。

但每个 IP 地址的数值 (uint32) 值可以通过以下方式计算:

d + 256 * c + 65536 * b + 16777216 * a

其中 a、b、c 和 d 是 IPv4 格式的以 10 为底的值: a.b.c.d

【讨论】:

  • 我更喜欢 d | (c
  • 从哪里得到这些数字?它们应该是25665,53616,777,216(这是我更喜欢 SDX 修改的原因之一)。
  • @paxdiablo 你是对的,这就是你在深夜得到的答案:) 我试图为不使用位移或 OR'ing 等的提问者设置一些东西。
  • 这是一种转换字节的有用方法。不知道为什么它被否决了,可能是(最初)不正确的乘数,但由于情况不再如此,+1。
【解决方案3】:

如果您想对 IP 列表进行排序,您还可以将 IP 存储在一个字符串中,每个八位字节前加 0 到 3 位数字。然后文本排序就可以正常工作了。

例子:

010.192.002.204
010.192.003.177 

【讨论】:

    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 2022-11-12
    • 2014-04-06
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    相关资源
    最近更新 更多