c语言更改网络ip,一段更换IP地址网络编号的C语言宏

对于下列宏进行分析:

#define bwMCDR2_ADDRESS 4

#define bsMCDR2_ADDRESS 17

#define bmMCDR2_ADDRESSBIT_MASK(MCDR2_ADDRESS)

#define BIT_MASK(_bf)((1U<

#define SET_BITS(_dst, _bf, _val)\

(_dst)= (((_dst)&~(BIT_MASK(_bf))) |(((_val)<

// 使用形式: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<

((1U<

宏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)<

((_dst)&~(BIT_MASK(_bf))) |(((_val)<

作用:SET_BITS可用于更新(bwMCDR2_ADDRESS+ bsMCDR2_ADDRESS)位IP地址的网络编号。

源码如下所示:

#include "stdio.h"

#include

#include "conio.h"

#define bwMCDR2_ADDRESS 4

#define bsMCDR2_ADDRESS 17

#define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)

#define BIT_MASK(_bf) ((1U<

#define SET_BITS(_dst, _bf, _val)\

(_dst)= ( ((_dst)&~(BIT_MASK(_bf))) | (((_val)<

/*使用形式: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*/

}

0818b9ca8b590ca3270a3433284dd417.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值