Неправильные цифры при расчете широковещательного адреса - PullRequest
0 голосов
/ 15 февраля 2019

У меня проблемы с вычислением широковещательного адреса с использованием IP-адреса и маски подсети.Это кажется простым, это должна быть просто широковещательная = ip | ~ маска, но в моем случае она не работает.Я попытался использовать + вместо оператора OR и использовать unsigned int вместо подписанного, но это все еще не работает.Вот часть кода, которая выполняет эту операцию, надеюсь, вы мне поможете.Массивы net [], являющиеся IP-адресом, и mask [] являются целыми числами, ранее использовавшимися в программе, и правильно выводятся и отлично работают в других операциях внутри моей программы (превращая их в двоичные, вычисляя сетевой адрес, используя & между ними и т. Д..)

int broadcast[4];    
   for(int i=0;i<4;i++) 
     broadcast[i]=net[i]|(~mask[i]);

Для 192.168.50.50 и 255.255.0.0 как net [] и mask [] Я ожидаю, что трансляция будет 192.168.255.255 , но я получаю -64.-88.-1-1

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Вывод, который вы видите, заключается в том, что вы используете подписанные значения и печатаете результаты как подписанные значения.

Измените типы значений на unsigned char и напечатайте с помощью %hhu.

0 голосов
/ 15 февраля 2019

Вы должны использовать unsigned char в качестве типа.Каждая часть IP является неотрицательным числом от 0 до 255.

...