判断掩码是否格式正确
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;
}