2010-09-08 154 views
0

例如,以下是兩組IP地址,現在,您將如何識別每組更大的IP?你會如何比較兩個IP地址以查看哪一個更大?

設置一個:

10.192.3.177和10.192.2.204

SET B:

10.192.3.205和10.192.2.204

謝謝!

+1

怎樣** **你比較兩個複數,看看哪一個更大? (對不起,關於在這裏沒有回答你的問題,它已經被回答了,只是必須指出,每一個這樣的結構都不是*可比*,除非你提供了一個定義來做這件事) – Michael 2010-09-08 06:29:35

回答

4

如果將它們轉換爲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) 

我有一個很難想象一個用情況會的問題,但是這就是如果我有一個程序來檢查我會採取的做法。

+0

不確定,但我懷疑OP正試圖對某些數據結構的地址進行排序。 – 2010-09-08 06:23:24

1

你應該澄清你的意思是「更大」。

但是每個IP地址的數值(UINT32)值可以用下式計算:

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

其中a,b,c和d是基本在IPv4的10個值格式化: ABCD

+3

我更喜歡d |這樣的東西(c << 8)| (b << 16)| (a << 24) – 2010-09-08 06:21:53

+2

從哪裏得到這些數字?它們應該是'256','65,536'和'16,777,216'(這是我更喜歡SDX修改的原因之一)。 – paxdiablo 2010-09-08 06:29:10

+0

@paxdiablo你是對的,這就是你得到的深夜答案:)我試圖設置一些東西,沒有使用位移或OR'ing等。 – userx 2010-09-08 18:22:32

1

如果您想要對IP列表進行排序,您還可以將IP存儲在一個字符串中,每個字節前面加上0到3個數字。然後文本排序工作正常。

例子:

010.192.002.204 
010.192.003.177