输入主机字节序的IP range,输出对应的主机字节序的CIDR(网络地址 + 掩码)。
// IPv4 范围转最少 CIDR(无 log2,纯位运算)
static void ipv4_range_to_cidr(uint32_t start, uint32_t end,
std::vector<std::pair<uint32_t,uint32_t>>& out)
{
while (start <= end)
{
uint32_t max_size = start & (~start + 1); // 最大对齐块
if (max_size == 0) max_size = 1u << 31; // 溢出保护
uint32_t remain = end - start + 1;
while (max_size > remain)
max_size >>= 1;
uint32_t mask = ~(max_size - 1); // 主机序掩码
out.push_back({start, mask});
start += max_size;
}
}
--
FROM 111.199.144.*