2009-08-18 5 views
5

In C/C++ können Sie den regulären Aufruf gethostbyname() verwenden, um eine IP-Adresszeichenfolge ("127.0.0.1" im Fall von localhost) in eine für den Standard geeignete Struktur umzuwandeln Socket-Anrufe.C++ IP-Adresse lesbares Formular

Nun, wie übersetzen Sie es zurück? Ich weiß, dass ich etwas Bit-Shifting machen kann, um genau die Bit-Sets zu bekommen, die ich möchte, und drucke diese einfach aus, aber gibt es irgendeine "Standard" -Funktion, um das für mich zu tun? Es ist für die Ausgabe in Protokolldateien gedacht, so dass ich "wirklich" weiß, mit wem ich mich verbinde, und daher ist eine vom Menschen lesbare punktierte Adresse viel besser als das rohe Hex.

Danke.

Antwort

10

Zuerst, in neuen Code sollten Sie im Allgemeinen lieber getaddrinfo() zu gethostbyname(), die alt und klobig und ist schwer zu verwenden, um sowohl IPv4 und IPv6 zu unterstützen. Siehe hier: http://beej.us/guide/bgnet/output/html/multipage/syscalls.html

Zweitens heißt die Funktion, die das tut, was Sie wollen, inet_ntop.

+1

Ich markierte dies als richtig, aber fand heraus, dass es nicht unter Windows funktionierte, aber fand, dass der richtige Funktionsaufruf dort inet_ntoa ist, der fast dasselbe tut. Es unterstützt nicht IPv6 nach beej, aber es ist in der normalen winsock.h für win32 Benutzer. –

Verwandte Themen