网络掩码转换为 C++ 中的 CIDR 格式

rez*_*eza 3 c++ networking

我必须将 2 个 DWORD、IP 地址和网络掩码转换为 CDIR 格式...所以我有 2 个 DWORD 对应于 1.1.1.1 和 255.255.255.255,我想提出字符串 1.1.1.1/32

对此有何想法?

谢谢

tal*_*ir_ 5

最简单的方法:

  static unsigned short toCidr(char* ipAddress)
  {
      unsigned short netmask_cidr;
      int ipbytes[4];

      netmask_cidr=0;
      sscanf(ipAddress, "%d.%d.%d.%d", &ipbytes[0], &ipbytes[1], &ipbytes[2], &ipbytes[3]);

      for (int i=0; i<4; i++)
      {
          switch(ipbytes[i])
          {
              case 0x80:
                  netmask_cidr+=1;
                  break;

              case 0xC0:
                  netmask_cidr+=2;
                  break;

              case 0xE0:
                  netmask_cidr+=3;
                  break;

              case 0xF0:
                  netmask_cidr+=4;
                  break;

              case 0xF8:
                  netmask_cidr+=5;
                  break;

              case 0xFC:
                  netmask_cidr+=6;
                  break;

              case 0xFE:
                  netmask_cidr+=7;
                  break;

              case 0xFF:
                  netmask_cidr+=8;
                  break;

              default:
                  return netmask_cidr;
                  break;
          }
      }

      return netmask_cidr;
  }
Run Code Online (Sandbox Code Playgroud)