子网掩码的有效性判断 判断IP及子网掩码是否合法(C语言实现)
实现思路参考 子网掩码计算
思路:将子网位数分成 4分,
若一份满足8(等于8)的话,则 其值为 2的8次幂 减去 2的0次幂,即:256 - 1 = 255;
若一份不满足8(小于8)的话,则 其值为 2的8次幂 减去 2的(与8的差值 次幂),即:256 - 2^(8-x) ;
若一份等于0时,则 其值为 2的8次幂 减去 2的8次幂,即:256 - 256 = 0;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
void nask_bits_to_netmask(int bits, char *ip)
{
int i = 0;
int cur_pow = 0;
int value = 0;
char *pos = NULL;
memset(ip, '\0', 17);
pos = ip;
for (i=0; i<4; ++i)
{
if (0 < bits)
{
if (0 != (bits / 8))
{
value = 255;
}
else
{
cur_pow = 8 - (bits % 8);
value = 256 - pow(2, cur_pow);
}
bits -= 8;
}
else
{
value = 0;
}
printf("%d, value = %d, bits = %d\n", i, value, bits);
pos = ip + strlen(ip);
snprintf(pos, 17 - strlen(ip), "%d.", value);
}
ip[strlen(ip) - 1] = '\0';;
}
int main(int argc, char **argv)
{
int bits = 0;
char ip[18] = {0};
if (2 != argc)
{
printf("paramater invalid!\n");
printf("usage: %s + bits(0 - 32)\n", argv[0]);
return -1;
}
bits = atoi(argv[1]);
nask_bits_to_netmask(bits, ip);
printf("bits = %d, netmask = %s\n", bits, ip);
return 0;
}