IP地址与子网掩码做逐位与运算

来源:互联网 发布:台湾中视直播软件 编辑:程序博客网 时间:2024/06/05 02:14

在写简单路由器程序的时候,需要将捕获的IP数据报中的目的IP地址与每一个路由表项中的子网掩码作逐位与运算再与对应的目的IP地址作比较。

作逐位与运算有两种比较简单的方式

1. 移位

unsigned long IPandMask(unsigned long ul_ip, unsigned long ul_mask){    unsigned long result = 0;    for (int i = 31; i >= 0; i--)    {        result = (result << 1) + (((ul_ip >> i) & 1) & ((ul_mask >> i) & 1));    }    return result;}

2. 使用bitset

#include <bitset>unsigned long IPandMask(unsigned long ul_ip, unsigned long ul_mask){    bitset<32> ip(ul_ip);    bitset<32> mask(ul_mask);    bitset<32> result;    result = ip & mask;    return result.to_ulong();}
1 0
原创粉丝点击