计算广播地址时数字错误

时间:2019-02-15 15:00:02

标签: c++ c mask broadcast subnet

使用IP地址和子网掩码来计算广播地址时遇到麻烦。看起来很简单,应该只是广播= ip |〜mask,但看来在我的情况下不起作用。我尝试使用+代替OR运算符,并使用unsigned int代替signed,但是仍然无法正常工作。这是执行此操作的代码部分,希望您能对我有所帮助。数组net []是IP地址,而mask []是整数,以前在程序中使用,可以正确输出并在程序内部的其他操作中正常工作(将它们转换为二进制文件,使用它们之间的&来计算网络地址,等等) )

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

对于net50和255.255.0.0的net []和mask [],我希望广播为 192.168.255.255 ,但是我得到的是 -64.-88.-1。 -1

2 个答案:

答案 0 :(得分:5)

您看到的输出是因为您正在使用带符号的值并将结果打印为带符号的值。

将值的类型更改为unsigned char并使用%hhu打印。

答案 1 :(得分:3)

您应该使用unsigned char作为类型。 IP的每个部分都是一个介于0到255之间的非负数。