IPv4 в десятичные разные значения? - PullRequest
3 голосов
/ 29 сентября 2010

Почему десятичное значение IPv4 отличается от inet_pton и inet_addr (1734763876) от того, что вы получаете, если используете эти 2 сайта (1684366951)?

struct sockaddr_in sin;
inet_pton(AF_INET, "100.101.102.103", &(sin.sin_addr));
printf("%i\n%i\n", inet_addr("100.101.102.103"), sin.sin_addr);

Ответы [ 2 ]

7 голосов
/ 29 сентября 2010

Endianness - они имеют четыре байта в противоположных порядках:

1734763876 = 0x67 66 65 64
1684366951 = 0x64 65 66 67

Значение, которое вам нужно использовать для URL-адресов и т. Д., - это значение в порядке «Сеть», сначала «Самый старший из байтов»,Используйте htonl() (host-to-network-long) для преобразования значения, то есть

printf("%i\n%i\n", htonl(inet_addr("100.101.102.103")), htonl(sin.sin_addr));

caf указывает на то, что у меня, вероятно, есть это задом наперед: проблема действительно в том, что вам нужнопреобразовать данные сетевого порядка из функций сокета обратно в порядок хоста для отображения, т.е.

printf("%i\n%i\n", ntohl(inet_addr("100.101.102.103")), ntohl(sin.sin_addr));
1 голос
/ 29 сентября 2010

inet_addr дает результат в порядке сетевых байтов.

1684366951 и 1734763876 - это одно и то же число ;-), если вы изменяете порядковый номер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...