Могу ли я использовать тип int для использования в качестве сетевой маски IP-адреса в C?

Мне нужно "И" IP-адрес с маской подсети. IP-адрес - это шестнадцатеричное число, а маска подсети - это число от 0 до 32 (не 0).

4a21bd6e/25

Можно ли использовать приведенный ниже код для "И" этих двух переменных, чтобы получить наиболее значимые 25 бит IP-адреса?

uint32_t IP = 4a21bd6e;
uint8_t netmask = 25;
int mask = 0x80000000;
uint32_t results = IP & (mask  >> (netmask - 1));

2 ответа

Ответ может быть - если ваш выбор компилятора / процессора делает:

Арифметическое смещение битов на целых числах со знаком

Почему бы не использовать uint32_t, как вы использовали для IP? Вы предполагаете, что int составляет 4 байта, но это не всегда так. Как правило, лучше использовать стандартные типы, поскольку они более переносимы и не зависят от архитектуры.

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