Без знака долго и uint32_t?

Я изучаю программирование сокетов, и я узнал, inet_addr функция. Но я запутался, как я могу справиться in_addr_t тип.

inet_addr функция возвращает in_addr_t тип который uint32_tтогда я должен использовать uint32_t переменная типа, чтобы справиться с этим?

В книге пример обрабатывает это как unsigned long типа, но я не понимаю, почему этот способ используется.

unsigned long conv_addr = inet_addr(addr1); // unsigned long == uint32_t?

2 ответа

Решение

Вам не нужно использовать uint32_t обрабатывать значение, возвращаемое из inet_addr, Вы можете использовать любой тип, который может представлять любое значение, которое может быть возвращено или которое вы можете использовать в вычислениях. Но почему бы не использовать uint32_t или in_addr_t тип?

Вы можете использовать длинный тип также для функции inet_addr(), так как большая часть архитектуры использует 32 бита (4 байта) для длинного типа, но это не всегда применимо

В некоторых архитектурах для длинного типа используется 64 бита. В соглашении LP64 для длинного типа используется 64 бита.

Но размер uint32_t всегда равен 32 битам, независимо от соглашения, которого придерживается компилятор.

Если вы пишете программы с использованием MSVC, он использует 32 бита для длинного типа.

Для gcc это зависит от компьютерного оборудования и реализации GCC.

Безопасно использовать unsigned long для присвоения возвращаемого типа inet_addr(), когда вы уверены, что long size составляет 32 бита.

Рекомендуется использовать uint32_t (32-битная память без знака) для inet_addr(), так что вам вообще не нужно заботиться о размере типа long...

Другие вопросы по тегам