2009-08-30 6 views
3

J'ai des valeurs hexadécimales dans le format de 4a0e94ca etc, et j'ai besoin de les convertir en IP, comment puis-je le faire en C#?C# convertir hexadécimal en ip

+1

Dup - http://stackoverflow.com/questions/1139957/c-convert-int-to-hex-and-back-again – johnc

+0

Désolé tireur d'élite, je vois que vous êtes nouveau ici. Veuillez rechercher des questions avant d'envoyer un doublon. Le lien vers la réponse que vous cherchez est au-dessus de – johnc

+1

Que ce soit un doublon dépend de la façon dont vous définissez une adresse IP, et ce que la sortie est (je suppose qu'il doit être converti en une chaîne). –

Répondre

3

Eh bien, prenez le format d'une adresse IP sous cette forme:

192.168.1.1 

Pour obtenir en un seul numéro, vous prenez chaque partie, ou ensemble, tout en déplaçant vers la gauche, 8 bits.

long l = 192 | (168 << 8) | (1 << 16) | (1 << 24); 

Ainsi, vous pouvez inverser ce processus pour votre numéro.

Comme si:

int b1 = (int) (l & 0xff); 
int b2 = (int) ((l >> 8) & 0xff); 
int b3 = (int) ((l >> 16) & 0xff); 
int b4 = (int) ((l >> 24) & 0xff); 

- Modifier

D'autres affiches ont probablement des moyens « nettoyant » de le faire en C#, utilisez donc probablement que dans le code de production, mais je pense que la façon dont je Avoir posté est une bonne façon d'apprendre le format des adresses IP.

+0

+1 - Je crois que le calcul au niveau du bit est probablement la partie la plus importante de la conversion d'entiers en IP (et vice versa), même si votre langage le fait pour vous. –

+0

@Matthew: Bien que je sois d'accord sachant que les mathématiques bitwise sont utiles, la plupart des langages dérivés de C ont la fonction inet_ntop et inet_pton dans ce but précis. – Powerlord

+0

@R. Bemrose: Bien sûr, mais je pense que c'est bon de savoir comment ces fonctions * fonctionnent *. Chacun à son tour, certaines personnes ne sont pas aussi enthousiastes que moi à propos de ce qui se passe aux niveaux inférieurs :) –

2

Vérifier C# convert integer to hex and back again

var ip = String.Format("{0}.{1}.{2}.{3}", 
    int.Parse(hexValue.Substring(0, 2), System.Globalization.NumberStyles.HexNumber), 
    int.Parse(hexValue.Substring(2, 2), System.Globalization.NumberStyles.HexNumber), 
    int.Parse(hexValue.Substring(4, 2), System.Globalization.NumberStyles.HexNumber), 
    int.Parse(hexValue.Substring(6, 2), System.Globalization.NumberStyles.HexNumber)); 
+0

C'est une façon assez décente, mais peut-être pas la plus rapide. Encore, +1. –

12

Si les valeurs représentent IPv4 vous adresse pouvez utiliser la méthode long.Parse et passer le résultat à la IPAddress constructor:

var ip = new IPAddress(long.Parse("4a0e94ca", NumberStyles.AllowHexSpecifier)); 

Si elles représentent IPv6 vous les adresses doivent convert the hex value to a byte array et utilisez this IPAddress constructor overload pour construire l'adresse IP.

+0

Aussi très bien. +1 –

+0

Plus propre que ma méthode :) –

+0

On dirait que la meilleure façon de moi –

Questions connexes