在描述子网掩码时,我们经常用一个数字来表示,例如192.168.1.1/24,斜线'/'后的24就表示子网掩码为255.255.255.0,而在网络编程的代码中我们更是用一个u8来表示掩码,因为完全没有必要传递一个字符串来表示掩码(当然用u32也行,四个字节用点分开就是).
这里我介绍一种简单的方法将n转换为点分十进制的掩码形式:
#include<stdio.h>
#define LMOVE(m,n) ((m)<<(n))
#define RMOVE(m,n) ((m)>>(n))
int main()
{
unsigned int addr;
char mask[32];
unsigned char n = 22; //传过来的掩码位数
addr = LMOVE(0xffffffff,32-n);//u32表示掩码(中间变量)
printf("addr = 0x%x\n",addr);
sprintf(mask,"%u.%u.%u.%u",RMOVE(addr,24),RMOVE(addr,16)&0xff,RMOVE(addr,8)&0xff,addr&0xff);//点分十进制表示掩码
printf("i = %s\n",mask);
return 0;
}
利用移位操作两行代码就能解析出点分十进制表示的掩码.若是有更好的方法可留言讨论.
2255

被折叠的 条评论
为什么被折叠?



