2009-01-29 5 views
5

Weiß jemand, wie man die IP-Adresse in dezimaler oder hex von der Standard-IP-Adresse format string ("xxx.xxx.xxx.xxx") bekommt?Wie konvertiert man die Standard-IP-Adresse Format Zeichenfolge in Hex und Long?

Ich habe versucht, die Funktion inet_addr() zu verwenden, aber nicht das richtige Ergebnis erhalten.

Getestet habe ich es auf „84.52.184.224“

die Funktion 3770168404 zurückgegeben, die nicht korrekt ist (das korrekte Ergebnis ist 1412741344).

Danke!

Antwort

7

Die Funktionen htonl, htons, ntohl, ntohs können verwendet werden, um zwischen Netzwerk- und lokalen Byte-Befehlen zu konvertieren.

2

Ich denke, dass Sie möglicherweise in eine Byte-Reihenfolge Problem auftreten. Aus der Manpage:

All Internet-Adressen in Netzwerk Reihenfolge zurückgegeben werden (Bytes von bestellt links nach rechts). Alle Netzwerknummern und lokalen Adressteile werden als Integer-Werte der Maschinen-Byte-Reihenfolge zurückgegeben.

+0

ich die Byte-Reihenfolge bemerkt habe, ist umgekehrt . e0b83454 - 5434B8E0. Danke für den Tipp! –

4

Das zurückgegebene Ergebnis korrekt ist, werden die Bytes in Netzwerk-Byte-Reihenfolge

bestellt
84 => 0x54 
52 => 0x34 
184 => 0xb8 
224 => 0xe0 
0xe0b83454 => 3770168404 
24

Sie haben nur die Bytes umgekehrt von dem, was Sie erwartet haben - sie sind in network byte order

3770168404 = 0xE0 B8 34 54  network byte order 
       |   | 
       \  /
       \ /
        \ /
        \/
        /\ 
       /\ 
       / \ 
       / \ 
       |  | 
1412741344 = 0x54 34 B8 E0  machine order 

Sie könnten ntohl() von Netzwerkauftrag zu Maschinenauftrag konvertieren.

0

Sorgfältig prüfen Sie den folgenden Link:

http: // msdn.microsoft.com/en-us/library/ms738563(VS.85).aspx

Verwandte Themen