Без знака долго и 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...