2009-08-18 2 views
5

В C/C++ вы можете использовать обычный вызов gethostbyname(), чтобы превратить строку адресного IP-адреса («127.0.0.1» в случае localhost) в структуру, подходящую для стандартных сокет.C++ IP-адрес, читаемый человеком Форма

Теперь как вы его переводите? Я знаю, что могу сделать некоторые бит-сдвиги, чтобы получить точно, какие битовые наборы мне нужны, и просто распечатать их, но есть ли какая-то «стандартная» функция для этого? Это для вывода в лог-файлы, так что я «действительно» знаю, к кому/к чему я подключаюсь, и, таким образом, удобный для пользователя точечный адрес намного лучше, чем исходный шестнадцатеричный.

Спасибо.

ответ

10

Прежде всего, в новом коде вы обычно должны использовать getaddrinfo() для gethostbyname(), который является старым и неуклюжим, и его сложно использовать для поддержки как IPv4, так и IPv6. См. Здесь: http://beej.us/guide/bgnet/output/html/multipage/syscalls.html

Во-вторых, функция, которая делает то, что вы хотите, называется inet_ntop.

+1

Я отметил это как правильно, но выяснил, что он не работает под окнами, но нашел, что правильный вызов функции есть inet_ntoa, что делает почти то же самое. Он не поддерживает IPv6 в соответствии с beej, но он находится в обычном winsock.h для пользователей win32. –

Смежные вопросы