一段更换IP地址网络编号的C语言宏
来源:互联网 发布:iis7 php 页面空白 编辑:程序博客网 时间:2024/05/29 11:21
对于下列宏进行分析:
#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17
#define bmMCDR2_ADDRESSBIT_MASK(MCDR2_ADDRESS)
#define BIT_MASK(_bf)((1U<<(bw##_bf))-1)<<(bs##_bf)
#define SET_BITS(_dst, _bf, _val)\
(_dst)= (((_dst)&~(BIT_MASK(_bf))) |(((_val)<<(bs##_bf))&(BIT_MASK(_bf))))
// 使用形式:SET_BITS(MCDR2,MCDR2_ADDRESS, RegisterNumber)
宏BIT_MASK:形成bwMCDR2_ADDRESS个1位及bsMCDR2_ADDRESS个0位的二进位串,即(bwMCDR2_ADDRESS+ bsMCDR2_ADDRESS)位地址的高bwMCDR2_ADDRESS为1的掩码。在此例中,bmMCDR2_ADDRESS = 1 1110 0000 0000 0000 0000。
工作原理:
(1U<<(bw##_bf))-1:将1左移bwMCDR2_ADDRESS位,并-1,当为4时,即(B1 0000 – 1) = 1111。
((1U<<(bw##_bf))-1)<<(bs##_bf):左移bsMCDR2_ADDRESS位,补0,即1 1110 0000 0000 0000 0000。
宏SET_BITS:将_dst地址的低bsMCDR2_ADDRESS(此例为17)与_val组成新地址。
若_dst=1 0010 1001 1100 0101 0011,_val = 0011,则_dst将形成新的地址:
0 0110 1001 1100 0101 0011。
工作原理:
(_dst)&~(BIT_MASK(_bf)):将掩码取反,与_dst相与,即取低bsMCDR2_ADDRESS位。
(_val)<<(bs##_bf)):将_val左移bsMCDR2_ADDRESS位,_val对应高bwMCDR2_ADDRESS位。
((_dst)&~(BIT_MASK(_bf))) |(((_val)<<(bs##_bf))&(BITMASK(_bf))):即将上两值或运算,取_val低bsMCDR2_ADDRESS位,取_val高bwMCDR2_ADDRESS位。
作用:SET_BITS可用于更新(bwMCDR2_ADDRESS+ bsMCDR2_ADDRESS)位IP地址的网络编号。
源码如下所示:
#include "stdio.h"
#include <stdlib.h>
#include "conio.h"
#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17
#define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)
#define BIT_MASK(_bf) ((1U<<(bw##_bf))-1)<<(bs##_bf)
#define SET_BITS(_dst, _bf, _val)\
(_dst)= ( ((_dst)&~(BIT_MASK(_bf))) | (((_val)<<(bs##_bf)) & (BIT_MASK(_bf))) )
/*使用形式:SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber)*/
void main()
{
unsigned dst = 0x1ffff; /* 1 1111 1111 1111 1111*/
unsigned regnum = 0x8; /* 1000 */
printf("%x\n", BIT_MASK(MCDR2_ADDRESS)); /*0x1e0000, 即: 1 1110 0000 0000 0000 0000*/
SET_BITS(dst, MCDR2_ADDRESS, regnum);
printf("%x\n", dst);/*11ffff,即: 1 0001 1111 1111 1111 1111*/
}
- 一段更换IP地址网络编号的C语言宏
- 方便的网络配置批处理-适用于经常更换ip地址的用户
- c语言判断ip地址是否合法的ip类型
- bat更换IP地址
- C语言IP地址知识
- 使用Go语言计算网络IP地址的CIDR
- (c#) 关于本地网络的IP地址的一些事
- 网络a、b、c类ip地址的区别
- 网络a、b、c类ip地址的区别
- 网络a、b、c类ip地址的区别
- 用c语言得到linux本机的IP地址
- 用C语言得到Linux主机的IP地址
- C语言实现静态IP地址,子网掩码,网关的设置
- 用C语言得到Linux主机的IP地址
- c语言实现IP地址输入的检查
- 一段搜索地址的C代码【原】
- 根据网卡名称编号获取指定网卡的IP地址
- 更换IP地址方法简介
- 表单提交和页面链接 中文显示问题
- My account
- JS做的图片滚动
- 关于登网鉴权Milenage算法C++实现(根据3GPP TS 35.206 V6.0.0程序修改)
- 最近工作动态
- 一段更换IP地址网络编号的C语言宏
- IS-IS知识
- Linux下的软磁盘矩阵Software RAID实现步骤简介
- UIApplication和UIApplicationDelegate
- 快速软件开发——有效控制与完成进度计划
- VC++创建BMP图像且保存
- MyEclipse快捷键大全
- Ubuntu 64bit 配置Android开发环境
- linux,网络层的配置