【问题标题】:Can I use int type to use as netmask of a IP address in C?我可以使用 int 类型作为 C 中 IP 地址的网络掩码吗?
【发布时间】:2014-10-12 16:54:27
【问题描述】:

我需要将 IP 地址与子网掩码“与”。 IP 地址是十六进制数字,子网掩码是 0 - 32 之间的数字(不是 0)。

4a21bd6e/25

我可以使用下面的代码将这两个变量“与”以获得 IP 地址的最高有效 25 位吗?

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

【问题讨论】:

  • 你试过了吗?你期待什么,结果如何?
  • 我编辑了最后两行代码,效果很好,但我想确定。
  • IPv4 地址是一个 4 字节的值,而 IPv4 子网掩码也是一个 4 字节的值。请解释你试图对转移做什么。如果您想要最重要的 25 位,那么只需使用该值的十六进制值。
  • 我们可以用 0 到 32 之间的数字显示子网掩码。如果我们想获得最高有效的网络掩码位,我们必须将 IP 地址与 0xff000000(8 位网络掩码)之类的东西“与”,但如果我们有 8 而不是 0xff000000 我们如何执行此操作?
  • @RichardChambers 什么是“十六进制”值?请更具体/准确。

标签: c ip bitwise-operators netmask


【解决方案1】:

答案是也许 - 如果您选择的编译器/处理器是:

Arithmetic bit-shift on a signed integer

【讨论】:

    【解决方案2】:

    为什么不像你用于 IP 的那样使用 uint32_t?您假设 int 是 4 个字节,但情况并非总是如此。一般来说,最好使用标准类型,因为它更便于移植,而且不是特定于架构的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      相关资源
      最近更新 更多