在写简单路由器程序的时候,需要将捕获的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();
}