【发布时间】:2013-04-10 23:29:00
【问题描述】:
我想使用按位运算将 /24 之类的前缀转换为 255.255.255.0。
我尝试过像这样使用 unsigned int:
unsigned int mask = -(1 << 32 - prefix);
我正在考虑创建一个 while 循环,将 1 加到正确的位置,然后减为 0。
所有帮助将不胜感激!
【问题讨论】:
标签: c ip-address bitwise-operators
我想使用按位运算将 /24 之类的前缀转换为 255.255.255.0。
我尝试过像这样使用 unsigned int:
unsigned int mask = -(1 << 32 - prefix);
我正在考虑创建一个 while 循环,将 1 加到正确的位置,然后减为 0。
所有帮助将不胜感激!
【问题讨论】:
标签: c ip-address bitwise-operators
使用
unsigned long mask = (0xFFFFFFFF << (32 - prefix)) & 0xFFFFFFFF;
printf("%lu.%lu.%lu.%lu\n", mask >> 24, (mask >> 16) & 0xFF, (mask >> 8) & 0xFF, mask & 0xFF);
【讨论】:
sprintf() 来制作文本字符串。
你试过了吗?
#include <stdint.h>
uint32_t mask = (-1) << (32 - prefix);
一旦 -1 在 2-补码表示中是 0xFFFFFFFF,它就可以工作
【讨论】: