计算广播地址时的数字错误

问题描述 投票:1回答:2

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

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

c++ c mask broadcast subnet
2个回答
5
投票

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

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


3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.