QT下实现判断IP地址和掩码有效性的类

在写程序时经常需要判断用户输入的IP地址的有效性,以及掩码的有效性,今天我写了一个简单的类实现这两个功能。

#ifndef NETPARAMETERACK_H
#define NETPARAMETERACK_H

#include <QString>
#include <QStringList>

/*
 * 网络参数有效性检查
 */ 
class NetParameterAck
{
public:
    NetParameterAck();
    
    /*
     * static bool isIPv4(QString ip)
     * 
     * 静态函数,检查IPv4的IP地址的字符串有效性
     * 
     * 参数输入字符串型点分十进制的IP地址,如果有效返回true
     * 否则返回false。
     */ 
    static bool isIPv4(QString ip){
        QStringList list = ip.split('.');
        if(list.size() != 4)
            return false;
        for(int i = 0; i < 4; i++){
            QString temp = list.at(i);
            if(i == 0){
                if(!(temp.toInt() > 0 &&
                     temp.toInt() < 256 &&
                     temp.at(0) != '0'))
                    return false;
            }
            else {
                if(!(temp.toInt() >= 0 &&
                     temp.toInt() < 256 &&
                     temp.size() > 0))
                    return false;
                else {
                    int num = temp.toInt();
                    int j = 0;
                    while (num > 0) {
                        j++;
                        num = num/10;
                    }
                    if(!(temp.size() == j ||
                         (temp.size() == 1 &&
                          j == 0)))
                        return false;
                }
            }
        }
        return true;
    }

    /*
     * static bool isMask(QString mask)
     * 
     * 静态函数,判断IPv4的点分十进制的掩码的有效性,将掩码
     * 转化为二进制的字符串,判断是否有01组合。如果有则返回
     * false,否则返回true。
     */ 
    static bool isMask(QString mask){
        QStringList list = mask.split('.');

        if(list.size() != 4)
            return false;

        QString str;
        for(int i = 0; i < 4; i++)
        {
            str += QString("%1").arg(list.at(i).toInt(),8,2,QLatin1Char('0'));
        }

        if(str.indexOf("01") > 0)
            return false;
        return true;
    }
};

#endif // NETPARAMETERACK_H

发布了23 篇原创文章 · 获赞 27 · 访问量 1153

猜你喜欢

转载自blog.csdn.net/BLUCEJIE/article/details/103800568
今日推荐