由数字转换到子网掩码

在描述子网掩码时,我们经常用一个数字来表示,例如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;
}
利用移位操作两行代码就能解析出点分十进制表示的掩码.若是有更好的方法可留言讨论.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值