какие адреса типа in_addr_t inet_ntoa и т. д. - PullRequest
8 голосов
/ 30 июня 2011

Хорошо, прежде чем писать этот вопрос, я проверил темы здесь in_addr_t в строку

мой вопрос другой.

Я понимаю, что функция inet_ntoa имеет следующий тип

char * inet_ntoa (struct in_addr in);

То, что я хочу знать, это то, что in_addr_t

каким будет представление, когда оно используется в программе сокетов.

Я проверил определение структуры в <netinet/in.h>

   typedef uint32_t in_addr_t;

   struct in_addr {
       in_addr_t s_addr;
   };

относится к вышеуказанному типу. Я не хочу печатать in_addr_t в char *, как это делает inet_ntoa. Я хочу посмотреть, что такое in_addr_t. Как это можно сделать или что именно представляет собой in_addr_t и почему он используется снова и снова в программировании сокетов. Если я не ошибаюсь, это определяется как

typedef uint32_t in_addr_t;

Так что, если in_addr_t равно unsigned 32 bit int, я хочу увидеть, что это такое, а не char *, который печатает 192.168.1.1 вывод на стандартный вывод.

1 Ответ

15 голосов
/ 30 июня 2011

Как мы все знаем (мы понимаем, верно?) Адрес IPv4 представлен с использованием 32-разрядного целого числа без знака.Нам, маленьким людям, не очень хорошо с большими числами (или маленькими), поэтому мы используем десятичную запись.(Знаете ли вы, что сейчас находитесь на 1076000524? И я тоже).

Однако, поскольку вы выкопали netinet и выяснили, что четко указано в стандарте

Заголовок <netinet/in.h> должен определять структуру in_addr, которая должна включать как минимум следующий элемент:

in_addr_t s_addr

Что составляет

in_addr_t Эквивалент типа uint32_t, как описано в <inttypes.h>

, вы можете распечатать его.

printf("My unreadable addres is %u\n", in.s_addr);

Быстро, что означает 134744072?

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