数学:计算范围内的总IP
Math: Calculate total IPS in range
我正在寻找一种计算范围内IP总数的方法。例如:在1.1.1.1和5.5.5.5之间,共有65022 IP。现在我有此代码:
int Remain =
(IP2[0] - IP1[0]) * 256 +
(IP2[1] - IP1[1]) * 256 +
(IP2[2] - IP1[2]) * 256 +
(IP2[3] - IP1[3]) + 1;
它仅适用于低至C类的范围。对于A和B类,它给出了错误的结果。我认为是因为数字太大,并且(int)无法持有它。任何人都有正确的算法来计算?
是的,基于我所看到的,如果C类(最多2^31组合)尽可能地走,这是一个很好的猜测,签名的INT是您的问题(假设您的机器上的INT是32位)
但是,切换到使用未签名的INT应该足够处理。但是,显然不同的类具有需要应用的掩码(http://www.vlsm-calc.net/ipclasses.php),因此如果应该考虑到这一点,则IDK。
同样,由于所有IPv4 IP都只是4字节号,我提供了另一种快速而肮脏的方法来计算这一点,您可以真正使用的电话,但是如果您需要:
unsigned int calculate_available_ips(int r_start[4], int r_end[4])
{
unsigned int ip1 = r_start[0] << 24 | r_start[1] << 16 | r_start[2] << 8 | r_start[3];
unsigned int ip2 = r_end[0] << 24 | r_end[1] << 16 | r_end[2] << 8 | r_end[3];
if (ip1 > ip2) {
return ip1 - ip2 + 1;
}
return ip2 - ip1 + 1;
}
自然会通过仅使用UINT上的位操作来完成掩蔽。注意,要打印一个未签名的值,请使用%u
代替%d
。
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 错误:未在此范围内声明'reverse'
- 并行用于C++17中数组索引范围内的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 不计算一个范围内的完美数
- 错误:"imread"未在此范围内声明
- 我在范围内未声明的错误类有问题
- 如何在cpp中使用地图显示给定日期范围内(在下面的问题中)的费率?
- 我有一个数组,我想输入一个范围,然后找到范围内所有偶数的总和?
- 未在此范围内声明错误 'xy'
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 命名空间范围内的外部 - GCC vs clang vs msvc
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 如何仅使用 While 循环在给定范围内找到可被 7 整除的计数整数
- Socklen_t未在此范围内声明
- 错误:'[' 之前预期的非限定 id 和错误:'users'未在此范围内声明
- 检查IP是否在其他IP网络范围内,并查找下一个可用IP
- 数学:计算范围内的总IP
- IP 地址重叠/在 CIDR 范围内
- IP在CIDR范围内