如何计算给定IPv4网络掩码的前缀长度?

时间:2014-07-24 12:19:35

标签: c++ ipv4

我需要计算IPv4网络掩码的前缀长度。我的第一个天真的方法是

int calculate_prefix_length (uint32_t address) {
  int set_bits;
    for (set_bits = 0; address; address >>= 1) {
      set_bits += address & 1;
    }
  return set_bits;
}

这可能不是很快。有更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

Netmak通常有' n' ' 1的数量后跟32 - ' n'零。所以先计算零,从32减去给出的数字为1' 1。或者,如果您的网络是A类,您可以先计算“1”的数量。以下内容对于课程“C'网络

int calculate_prefix_length (uint32_t address) {
   int zero_bits;
   for (zero_bits = 0; (address & 1) == 0; address >>= 1, zero_bits++);
   return (32 - zero_bits);
}