【问题标题】:Wrong numbers when calculating broadcast address计算广播地址时数字错误
【发布时间】:2023-03-04 15:21:01
【问题描述】:

我在使用 IP 地址和子网掩码计算广播地址时遇到问题。看起来很简单,应该只是 broadcast=ip|~mask ,但在我的情况下似乎不起作用。我尝试使用 + 代替 OR 运算符并使用 unsigned int 代替有符号,但它仍然不起作用。这是执行此操作的代码部分,希望您能帮助我。作为 IP 地址的数组 net[] 和 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

【问题讨论】:

  • masknet 的值是多少?我怀疑您的 ~mask[i] 翻转的 IP 地址中每个八位字节的八位多于八位,因此您最终得到负数,因为您翻转了 int 中的最高位...
  • 请注意(unsigned char)(-1) == 255(unsigned char)(-88) == 168
  • @hlt:不管值是什么,操作数提升保证~的结果超过8位。
  • 你是绝对正确的,当然@BenVoigt

标签: c++ c mask broadcast subnet


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-09-04
      • 1970-01-01
      • 2010-10-21
      • 2011-02-28
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 2010-10-16
      相关资源
      最近更新 更多