常用的功能喊:判断掩码是否合格

本文介绍了一个用于检查IP地址掩码是否正确的算法实现。通过将字符串形式的掩码转换为整数数组,并逐位对比每一位是否符合掩码规则,确保了掩码的有效性和连续性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

判断掩码是否格式正确

void CDlgiPublishNetwork::AddressCStringToIntArray(int addString[4],CString str)

{

  int begin = 0;

  int end   = 0;

  int sum   = 0;

 

  while(3 > sum)

  {

   end  = str.Find('.',begin);

   addString[sum] = _ttoi(str.Mid(begin,end - begin));

   begin = end + 1;

   sum ++ ;

  }

  addString[sum] = _ttoi(str.Right(str.GetLength() - begin));

}

 

 BOOL CDlgiPublishNetwork::IsIpAddressMaskRight(CString addMask)

{

  int maskArr[4]= {0,0,0,0};

  AddressCStringToIntArray(maskArr,addMask);

  

  int sum    = 3;

  int different = 0 ;//若1、0分别连续,那么统计每一位与他左侧位是否相同,其结果只能为1,大于则直接返回

         //目前不讨论,掩码全为0 与全为1的情况

  int low    = 0 ;//当前位

  int left   = 0 ;//左侧位

  int everySum = 0 ;//每节取位次数

  while(0 <= sum)

  {

   while(8 > everySum)

   {

     //取最低位

     left = maskArr[sum] & 1;

     //将每一位与其左侧位进行比较,不同则加1

     if(left != low)

      different ++ ;

     low  = left;

     maskArr [sum] = maskArr[sum] >> 1;

     everySum ++ ;

   }

   sum--;

   everySum = 0;

   

   if(1 < different)

     return FALSE;

  }

  return TRUE;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值