日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT5 C++编写B类IP地址计算第一个可用IP地址、最后一个可用IP地址、网络号、广播地址、子网数、主机数

發布時間:2025/3/11 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT5 C++编写B类IP地址计算第一个可用IP地址、最后一个可用IP地址、网络号、广播地址、子网数、主机数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

B類地址,斜線記法,192.168.60.1/24其中192.168.10.1是IP字符串strIP,24是子網掩碼1的個數nSubnetMas,其中要求18<=nSubnetMas<=30

#include "qdlgiptool.h" #include "ui_qdlgiptool.h" #include <QDebug>// #include <QtMath>//數學函數 #include <QMessageBox>////單擊“計算”按鈕消息處理函數 void QDlgIPTool::on_btIPToolCal_clicked() {QString strIP;//IP字符串int nSubnetMask;//子網掩碼整數(nSubnet個1)quint64 subnetMaskTotal=0;//子網掩碼位nSubnetMask個1用10進制表示quint64 hostTotal=0;//主機位(32-nSubnetMask)個1用10進制表示quint64 temp=0;//臨時變量//計算IP===========================================================ui->widgetIP->setFocus();//設置焦點strIP=ui->widgetIP->getIP();//獲取IP字符串if(strIP.isEmpty())//判斷IP是否為空{QMessageBox::information(this,"消息","請輸入IP地址!",QMessageBox::Ok,QMessageBox::NoButton);}else{QStringList strListIP=strIP.split(".");//按照指定的字符分割IP字符串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,"消息","請補全IP地址!",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;//計算子網掩碼=================================================nSubnetMask=ui->spinBoxnumSubnetMask->value();//獲取子網掩碼1的個數//計算出子網掩碼位nSubnetMask個1用10進制表示的整數for(int i=0;i<nSubnetMask;i++){temp=1;temp<<=(31-i);subnetMaskTotal|=temp;}//qDebug()<<subnetTotal;//輸出子網掩碼的10進制數//計算出子網掩碼各個段10進制整數uint nSubnetMask1=(subnetMaskTotal&4278190080)>>24;uint nSubnetMask2=(subnetMaskTotal&16711680)>>16;uint nSubnetMask3=(subnetMaskTotal&65280)>>8;uint nSubnetMask4=(subnetMaskTotal&255);//轉換出子網掩碼各個段10進制整數的字符串形式QString strSubnetMask1=QString::number(nSubnetMask1,10);QString strSubnetMask2=QString::number(nSubnetMask2,10);QString strSubnetMask3=QString::number(nSubnetMask3,10);QString strSubnetMask4=QString::number(nSubnetMask4,10);//整合子網掩碼各個段10進制整數的字符串形式QString strSubnetMask=strSubnetMask1+"."+strSubnetMask2+"."+strSubnetMask3+"."+strSubnetMask4;//qDebug()<<strSubnetMask;//輸出整合后的子網掩碼字符串ui->widgetSubNetMask->setIP(strSubnetMask);//設置子網掩碼顯示//計算網絡號===============================================//計算出網絡號各個段10進制整數的字符串形式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);//整合網絡號各個段10進制整數的字符串形式QString strNet=strNet1+"."+strNet2+"."+strNet3+"."+strNet4;//qDebug()<<strNet;//輸出整合后的網絡號字符串ui->widgetNetNumber->setIP(strNet);//設置網絡號顯示//計算第一個可用IP===========================================//計算出第一個可用IP各個段10進制整數的字符串形式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);//整合第一個可用IP各個段10進制整數的字符串形式QString strFirstValidIP=strFirstValidIP1+"."+strFirstValidIP2+"."+strFirstValidIP3+"."+strFirstValidIP4;//qDebug()<<strFirstValidIP;//輸出整合后的第一個可用IP字符串ui->widgetFirstValidIP->setIP(strFirstValidIP);//設置第一個可用IP顯示//計算最后一個可用IP===========================================//計算出主機位(32-nSubnet)個1用10進制表示的整數for(int16_t i=0;i<32-nSubnetMask;i++){temp=1;temp<<=i;hostTotal|=temp;}//qDebug()<<hostTotal;//輸出主機的10進制數//計算出最后一個可用IP各個段10進制整數的字符串形式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);//整合最后一個可用IP各個段10進制整數的字符串形式QString strLastValidIP=strLastValidIP1+"."+strLastValidIP2+"."+strLastValidIP3+"."+strLastValidIP4;//qDebug()<<strLastValidIP;//輸出整合后的最后一個可用IP字符串ui->widgetLastValidIP->setIP(strLastValidIP);//設置最后一個可用IP顯示//計算廣播IP===========================================//計算出廣播IP各個段10進制整數的字符串形式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各個段10進制整數的字符串形式QString strGuangBoIP=strGuangBoIP1+"."+strGuangBoIP2+"."+strGuangBoIP3+"."+strGuangBoIP4;//qDebug()<<strGuangBoIP;//輸出整合后的廣播IP字符串ui->widgetGuangBoIP->setIP(strGuangBoIP);//設置廣播IP顯示//計算子網數(適用于B類地址)===========================================double nSubnetNumber=qPow(2,nSubnetMask-16)-2;//計算子網數QString strSubnetNumber=QString::number(nSubnetNumber);ui->lineEditSubnetNumber->setText(strSubnetNumber);//設置子網數顯示//計算每個子網主機數===========================================double nHostNumber=qPow(2,32-nSubnetMask)-2;//計算主機數QString strHostNumber=QString::number(nHostNumber);ui->lineEditHostNumber->setText(strHostNumber);//設置主機數顯示ui->btIPToolCal->setFocus();//設置焦點}} }

總結

以上是生活随笔為你收集整理的QT5 C++编写B类IP地址计算第一个可用IP地址、最后一个可用IP地址、网络号、广播地址、子网数、主机数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。