【发布时间】: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