用C转换子网掩码前缀

时间:2013-04-18 01:22:56

标签: c ip-address bitwise-operators

我想使用按位运算将/ 24之类的前缀转换为255.255.255.0。

我尝试过像这样使用unsigned int:

unsigned int mask = -(1 << 32 - prefix);

我正在考虑创建一个while循环,它将1添加到正确的位置,然后递减为0.

所有帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

使用

unsigned long mask = (0xFFFFFFFF << (32 - prefix)) & 0xFFFFFFFF;

printf("%lu.%lu.%lu.%lu\n", mask >> 24, (mask >> 16) & 0xFF, (mask >> 8) & 0xFF, mask & 0xFF);

答案 1 :(得分:1)

你试过吗?

#include <stdint.h>
uint32_t mask = (-1) << (32 - prefix);

一旦-1为0补充表示法中的0xFFFFFFFF,它就完成了工作