2010-09-08 5 views
0

Par exemple, voici deux ensembles d'adresses IP, maintenant, comment identifieriez-vous le plus grand IP pour chaque ensemble?Comment comparer deux adresses IP pour voir laquelle est la plus grande?

SET A:

10.192.3.177 et 10.192.2.204

SET B:

10.192.3.205 et 10.192.2.204

Merci !!

+1

Comment vous ** ** comparer deux nombres complexes pour voir qui est plus grand? (Désolé de ne pas avoir répondu à votre question, il a déjà été répondu, je devais juste faire remarquer que de telles structures ne sont pas * comparables *, sauf si vous fournissez une définition pour le faire) – Michael

Répondre

4

Si vous les convertissez en un entier de 32 bits, le plus grand sera l'entier supérieur. En d'autres termes:

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) 

Je vais avoir du mal à imaginer un cas d'utilisation où il serait question, mais c'est l'approche que je prendrais si je devais vérifier dans un programme.

+0

Pas sûr, mais je soupçonne l'OP essaie de trier les adresses pour une structure de données. –

1

Vous devriez probablement préciser ce que vous entendez par «plus grand».

Mais la valeur numérique (uint32) de chaque adresse IP peut être calculée avec:

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

où a, b, c, et d sont la base de 10 valeurs dans une adresse IPv4 au format: abcd

+3

Je préfère quelque chose comme D | (c << 8) | (b << 16) | (a << 24) –

+2

D'où proviennent ces chiffres? Ils devraient être «256», «65 536» et «16 777 216» (ce qui est l'une des raisons pour lesquelles je préfère la modification de SDX). – paxdiablo

+0

@paxdiablo Vous avez raison, c'est ce que vous obtenez pour les réponses de fin de nuit :) J'essayais de mettre quelque chose en place pour le demandeur qui n'utilisait pas le bit shift ou OR, etc – userx

1

Si vous cherchez un moyen de trier une liste d'adresses IP, vous pouvez également stocker l'adresse IP dans une chaîne avec chaque octet précédé de 0 à 3 chiffres. Ensuite, un tri par texte fonctionne bien.

Exemple:

010.192.002.204 
010.192.003.177 
Questions connexes