点分十进制子网掩码与CIDR相互转换详解
输入一个点分十进制的子网掩码地址, 转换为一个CIDR值, 比如输入255.255.255.0, 则得到24位掩码.
255.255.255.0的二进制表现为:
11111111 11111111 11111111 00000000
#include
#include
#include
#if 0
static int ntod(u_int32_t mask) { //转换函数1
int i, n = 0;
int bits = sizeof(u_int32_t) * 8;
for(i = bits - 1; i >= 0; i--) {
if (mask & (0x01 << i))
n++;
}
return n;
}
#else
static int ntod(u_int32_t mask) { //转换函数2
float f;
mask = -mask; //第一步
f = mask; //第二步
mask = *(unsigned *)&f; //第三步
mask = 159 - (mask >> 23); //第四步
return mask;
}
#endif
static u_int32_t dton(u_int32_t mask) { //转换函数3
u_int32_t i, c;
int bits = sizeof(u_int32_t) * 8;
i =