QT5 C++编写B类IP地址计算第一个可用IP地址、最后一个可用IP地址、网络号、广播地址、子网数、主机数
生活随笔
收集整理的這篇文章主要介紹了
QT5 C++编写B类IP地址计算第一个可用IP地址、最后一个可用IP地址、网络号、广播地址、子网数、主机数
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
B類地址,斜線記法,192.168.60.1/24其中192.168.10.1是IP字符串strIP,24是子網(wǎng)掩碼1的個(gè)數(shù)nSubnetMas,其中要求18<=nSubnetMas<=30
#include "qdlgiptool.h" #include "ui_qdlgiptool.h" #include <QDebug>// #include <QtMath>//數(shù)學(xué)函數(shù) #include <QMessageBox>////單擊“計(jì)算”按鈕消息處理函數(shù) void QDlgIPTool::on_btIPToolCal_clicked() {QString strIP;//IP字符串int nSubnetMask;//子網(wǎng)掩碼整數(shù)(nSubnet個(gè)1)quint64 subnetMaskTotal=0;//子網(wǎng)掩碼位nSubnetMask個(gè)1用10進(jìn)制表示quint64 hostTotal=0;//主機(jī)位(32-nSubnetMask)個(gè)1用10進(jìn)制表示quint64 temp=0;//臨時(shí)變量//計(jì)算IP===========================================================ui->widgetIP->setFocus();//設(shè)置焦點(diǎn)strIP=ui->widgetIP->getIP();//獲取IP字符串if(strIP.isEmpty())//判斷IP是否為空{QMessageBox::information(this,"消息","請(qǐng)輸入IP地址!",QMessageBox::Ok,QMessageBox::NoButton);}else{QStringList strListIP=strIP.split(".");//按照指定的字符分割I(lǐng)P字符串QString strIP1=strListIP[0];QString strIP2=strListIP[1];QString strIP3=strListIP[2];QString strIP4=strListIP[3];//輸出分割后的IP字符串//qDebug()<<strIP1;//qDebug()<<strIP2;//qDebug()<<strIP3;//qDebug()<<strIP4;//判斷IP地址是否全部輸入if(strIP1.isEmpty()||strIP2.isEmpty()||strIP3.isEmpty()||strIP4.isEmpty()){QMessageBox::information(this,"消息","請(qǐng)補(bǔ)全I(xiàn)P地址!",QMessageBox::Ok,QMessageBox::NoButton);}else{uint nIP1=strIP1.toUInt();uint nIP2=strIP2.toUInt();uint nIP3=strIP3.toUInt();uint nIP4=strIP4.toUInt();//qDebug()<<nIP1;//qDebug()<<nIP2;//qDebug()<<nIP3;//qDebug()<<nIP4;//計(jì)算子網(wǎng)掩碼=================================================nSubnetMask=ui->spinBoxnumSubnetMask->value();//獲取子網(wǎng)掩碼1的個(gè)數(shù)//計(jì)算出子網(wǎng)掩碼位nSubnetMask個(gè)1用10進(jìn)制表示的整數(shù)for(int i=0;i<nSubnetMask;i++){temp=1;temp<<=(31-i);subnetMaskTotal|=temp;}//qDebug()<<subnetTotal;//輸出子網(wǎng)掩碼的10進(jìn)制數(shù)//計(jì)算出子網(wǎng)掩碼各個(gè)段10進(jìn)制整數(shù)uint nSubnetMask1=(subnetMaskTotal&4278190080)>>24;uint nSubnetMask2=(subnetMaskTotal&16711680)>>16;uint nSubnetMask3=(subnetMaskTotal&65280)>>8;uint nSubnetMask4=(subnetMaskTotal&255);//轉(zhuǎn)換出子網(wǎng)掩碼各個(gè)段10進(jìn)制整數(shù)的字符串形式QString strSubnetMask1=QString::number(nSubnetMask1,10);QString strSubnetMask2=QString::number(nSubnetMask2,10);QString strSubnetMask3=QString::number(nSubnetMask3,10);QString strSubnetMask4=QString::number(nSubnetMask4,10);//整合子網(wǎng)掩碼各個(gè)段10進(jìn)制整數(shù)的字符串形式QString strSubnetMask=strSubnetMask1+"."+strSubnetMask2+"."+strSubnetMask3+"."+strSubnetMask4;//qDebug()<<strSubnetMask;//輸出整合后的子網(wǎng)掩碼字符串ui->widgetSubNetMask->setIP(strSubnetMask);//設(shè)置子網(wǎng)掩碼顯示//計(jì)算網(wǎng)絡(luò)號(hào)===============================================//計(jì)算出網(wǎng)絡(luò)號(hào)各個(gè)段10進(jìn)制整數(shù)的字符串形式QString strNet1=QString::number(nIP1&nSubnetMask1,10);QString strNet2=QString::number(nIP2&nSubnetMask2,10);QString strNet3=QString::number(nIP3&nSubnetMask3,10);QString strNet4=QString::number(nIP4&nSubnetMask4,10);//整合網(wǎng)絡(luò)號(hào)各個(gè)段10進(jìn)制整數(shù)的字符串形式QString strNet=strNet1+"."+strNet2+"."+strNet3+"."+strNet4;//qDebug()<<strNet;//輸出整合后的網(wǎng)絡(luò)號(hào)字符串ui->widgetNetNumber->setIP(strNet);//設(shè)置網(wǎng)絡(luò)號(hào)顯示//計(jì)算第一個(gè)可用IP===========================================//計(jì)算出第一個(gè)可用IP各個(gè)段10進(jìn)制整數(shù)的字符串形式QString strFirstValidIP1=QString::number(nIP1&nSubnetMask1,10);QString strFirstValidIP2=QString::number(nIP2&nSubnetMask2,10);QString strFirstValidIP3=QString::number(nIP3&nSubnetMask3,10);QString strFirstValidIP4=QString::number((nIP4&nSubnetMask4)+1,10);//整合第一個(gè)可用IP各個(gè)段10進(jìn)制整數(shù)的字符串形式QString strFirstValidIP=strFirstValidIP1+"."+strFirstValidIP2+"."+strFirstValidIP3+"."+strFirstValidIP4;//qDebug()<<strFirstValidIP;//輸出整合后的第一個(gè)可用IP字符串ui->widgetFirstValidIP->setIP(strFirstValidIP);//設(shè)置第一個(gè)可用IP顯示//計(jì)算最后一個(gè)可用IP===========================================//計(jì)算出主機(jī)位(32-nSubnet)個(gè)1用10進(jìn)制表示的整數(shù)for(int16_t i=0;i<32-nSubnetMask;i++){temp=1;temp<<=i;hostTotal|=temp;}//qDebug()<<hostTotal;//輸出主機(jī)的10進(jìn)制數(shù)//計(jì)算出最后一個(gè)可用IP各個(gè)段10進(jìn)制整數(shù)的字符串形式temphost1=quint8(hostTotal>>24);QString strGuangBoIP1=QString::number((nIP1&nSubnetMask1)|temphost1,10);temphost2=quint8(hostTotal>>16);QString strGuangBoIP2=QString::number((nIP2&nSubnetMask2)|temphost2,10);quint8 temphost3=quint8(hostTotal>>8);QString strLastValidIP3=QString::number((nIP3&nSubnetMask3)|temphost3,10);quint8 temphost4=quint8(hostTotal&255);QString strLastValidIP4=QString::number(((nIP4&nSubnetMask4)|temphost4)-1,10);//整合最后一個(gè)可用IP各個(gè)段10進(jìn)制整數(shù)的字符串形式QString strLastValidIP=strLastValidIP1+"."+strLastValidIP2+"."+strLastValidIP3+"."+strLastValidIP4;//qDebug()<<strLastValidIP;//輸出整合后的最后一個(gè)可用IP字符串ui->widgetLastValidIP->setIP(strLastValidIP);//設(shè)置最后一個(gè)可用IP顯示//計(jì)算廣播IP===========================================//計(jì)算出廣播IP各個(gè)段10進(jìn)制整數(shù)的字符串形式temphost1=quint8(hostTotal>>24);QString strGuangBoIP1=QString::number((nIP1&nSubnetMask1)|temphost1,10);temphost2=quint8(hostTotal>>16);QString strGuangBoIP2=QString::number((nIP2&nSubnetMask2)|temphost2,10);temphost3=quint8(hostTotal>>8);QString strGuangBoIP3=QString::number((nIP3&nSubnetMask3)|temphost3,10);temphost4=quint8(hostTotal&255);QString strGuangBoIP4=QString::number((nIP4&nSubnetMask4)|temphost4,10);//整合廣播IP各個(gè)段10進(jìn)制整數(shù)的字符串形式QString strGuangBoIP=strGuangBoIP1+"."+strGuangBoIP2+"."+strGuangBoIP3+"."+strGuangBoIP4;//qDebug()<<strGuangBoIP;//輸出整合后的廣播IP字符串ui->widgetGuangBoIP->setIP(strGuangBoIP);//設(shè)置廣播IP顯示//計(jì)算子網(wǎng)數(shù)(適用于B類地址)===========================================double nSubnetNumber=qPow(2,nSubnetMask-16)-2;//計(jì)算子網(wǎng)數(shù)QString strSubnetNumber=QString::number(nSubnetNumber);ui->lineEditSubnetNumber->setText(strSubnetNumber);//設(shè)置子網(wǎng)數(shù)顯示//計(jì)算每個(gè)子網(wǎng)主機(jī)數(shù)===========================================double nHostNumber=qPow(2,32-nSubnetMask)-2;//計(jì)算主機(jī)數(shù)QString strHostNumber=QString::number(nHostNumber);ui->lineEditHostNumber->setText(strHostNumber);//設(shè)置主機(jī)數(shù)顯示ui->btIPToolCal->setFocus();//設(shè)置焦點(diǎn)}} }總結(jié)
以上是生活随笔為你收集整理的QT5 C++编写B类IP地址计算第一个可用IP地址、最后一个可用IP地址、网络号、广播地址、子网数、主机数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 五、QPushButton按钮和QLin
- 下一篇: ceph iscsi安装