Как преобразовать стандартную строку формата IP-адреса в шестнадцатеричный и длинный? - PullRequest
5 голосов
/ 29 января 2009

Кто-нибудь знает, как получить IP-адрес в десятичном или шестнадцатеричном виде из стандартной строки формата IP-адреса ("xxx.xxx.xxx.xxx")?

Я пытался использовать функцию inet_addr (), но не получил правильный результат.

Я проверил это на "84.52.184.224"

функция вернула 3770168404, что неверно (правильный результат - 1412741344).

Спасибо!

Ответы [ 5 ]

24 голосов
/ 29 января 2009

Вы только что перевернули байты по сравнению с тем, что ожидали - они в порядке сетевых байтов

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

Вы можете использовать ntohl () для преобразования сетевого заказа в машинный.

7 голосов
/ 29 января 2009

Функции htonl, htons, ntohl, ntohs можно использовать для преобразования между сетевым и локальным порядком байтов.

4 голосов
/ 29 января 2009

Возвращенный результат правильный, байты упорядочены в порядке сетевых байтов

84 => 0x54
52 => 0x34
184 => 0xb8
224 => 0xe0
0xe0b83454 => 3770168404
2 голосов
/ 29 января 2009

Я думаю, что вы можете столкнуться с проблемой порядка байтов. Со страницы руководства:

Все интернет-адреса возвращаются в сетевом порядке (байты заказаны из слева направо). Все номера сети и части локального адреса возвращаются как целочисленные значения порядка байтов машины.

0 голосов
/ 26 мая 2009

Внимательно проверьте ссылку ниже:

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

...