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();//设置焦点}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS7搭建部署Ambari 2.6.2.0最新版(HDP-UTILS、HDP-GPL)大数据平台

如上述博客有任何错误或者疑问&#xff0c;请加VX&#xff1a;1755337994&#xff0c;及时告知&#xff01;万分感激&#xff01; 注&#xff1a;本文基于root用户操作 一、安装环境准备 操作系统 centos7.5 hdc-data1&#xff1a;192.168.163.51 hdc-data2&#xff1a;192.16…

阿里面试题BIO和NIO数量问题附答案和代码

一、问题 BIO 和 NIO 作为 Server 端&#xff0c;当建立了 10 个连接时&#xff0c;分别产生多少个线程&#xff1f; 答案&#xff1a; 因为传统的 IO 也就是 BIO 是同步线程堵塞的&#xff0c;所以每个连接都要分配一个专用线程来处理请求&#xff0c;这样 10 个连接就会创建…

机器翻译软件从实验室走向市场

机器翻译软件从实验室走向市场 冯志伟 机器翻译研究如何用计算机来进行不同自然语言之间的翻译&#xff0c;它是自然语言计算机处理的一个历史悠久的部门&#xff0c;是横跨语言学、数学、计算机科学的综合性学科&#xff0c;也是计算机软件应用的一个重要领域…

八、python编写IP地址计算第一个可用IP地址、最后一个可用IP地址、网络号、广播地址、主机数

# IP子网掩码转为子网掩码有多少个1的整数,例如:"255.255.255.0"有24个1 def strNetmask2nNetmask(strNetmask: str) -> int:result = ""print(strNetmask)for num in strNetmask.split(

CentOS7搭建离线部署Cloudera CDH 6.2.0大数据平台

如上述博客有任何错误或者疑问&#xff0c;请加VX&#xff1a;1755337994&#xff0c;及时告知&#xff01;万分感激&#xff01; 1.概述 CDH&#xff0c;全称Clouderas Distribution, including Apache Hadoop。是Hadoop众多分支中对应中的一种&#xff0c;由Cloudera维护&a…

负载均衡实现的几种方式

负载均衡&#xff0c;英文名Load Balance&#xff0c;作用是将操作分摊到多个执行单元上执行。随着如今网络流量的不断增大&#xff0c;服务的负载均衡是必须的&#xff0c;这里就来讲一讲负载均衡的结构。 说到负载均衡&#xff0c;同学最容易想到的可能就是nginx了&…

CheckBox as Image use button

为什么80%的码农都做不了架构师&#xff1f;>>> <CheckBox android:id"id/notificationPhoneIcon" android:layout_width"wrap_content" android:layout_height"wrap_content" android:layout_centerVertical"true" an…

1-1.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之一

首先&#xff0c;安装python3.8和pycharm参考其他教程。 一、安装django 使用下面命令默认安装最新版的django pip install django也可以从django官网查看安装一个LTS长期稳定支持版本&#xff0c;从下图看到3.2是LTS版本&#xff0c;能够长期支持2021年&#xff5e;2024年&…

python装饰器函数传参

python装饰器函数传参 装饰器 装饰器是一个返回函数的高阶函数。 装饰器常见用法&#xff1a; 打印日志 def logger(func):def wrapper(*args, **kw):print do {}.format(func.__name__)func(*args, **kw)print finishreturn wrapperlogger def add(x,y):print {} {} {}.…

Tomcat工作原理及简单模拟实现

Tomcat应该都不陌生&#xff0c;我们经常会把写好的代码打包放在Tomcat里并启动&#xff0c;然后在浏览器里就能愉快的调用我们写的代码来实现相应的功能了&#xff0c;那么Tomcat是如何工作的&#xff1f;一、Tomcat工作原理我们启动Tomcat时双击的startup.bat文件的主要作用是…

苹果怎么调字体大小?详细教程在这,赶快get起来!

在我们使用苹果手机时&#xff0c;可能会遇到需要调整字体大小的情况。合适的字体大小能够提高阅读体验和舒适度&#xff0c;使得手机使用更加便捷。然而&#xff0c;还有很多用户并不知道苹果怎么调字体大小。别着急&#xff01;本文将为您详细介绍操作方法&#xff0c;帮助您…

javascript加载优化

1.将script放置在尽可能接近body标签底部的位置2.减少script总数3.defer 对应的script标签会被下载但不会被执行在onload句柄之前执行&#xff0c;但只兼容IE4 ff3.54.动态创建script 无论合适加载执行都不会影响页面加载转载于:https://www.cnblogs.com/qingw/p/3636304.html

PyQt5树形结构控件QTreeWidget操作

QTreeWidget 类根据预设的模型提供树形显示控件。 QTreeWidget 使用类似于 QListView 类的方式提供一种典型的基于 item 的树形交互方法类&#xff0c;该类基于QT的“模型/视图”结构&#xff0c;提供了默认的模型来支撑 item 的显示&#xff0c;这些 item 类为 QTreeWidgetIt…

Python3之logging输出写入日志

Python3之logging模块浅析 目录 Python3之logging模块浅析 简单用法日志与控制台同时输出 一个同时输出到屏幕、文件的完成例子日志文件截取日志重复打印问题解决 问题分析解决方案 1.使用不同的日志对象2.及时清理&#xff08;logger.handlers.clear&#xff09;3.使用前先判…

HashMap线程安全问题

HashMap是线程不安全的&#xff0c;在多线程环境下对某个对象中HashMap类型的实例变量进行操作时&#xff0c;可能会产生各种不符合预期的问题。本文详细说明一下HashMap存在的几个线程安全问题。注&#xff1a;以下基于JDK1.8HashMap原理请走传送门通过简单例子来探索HashMap原…

四、PyCharm PyQt5创建主窗口详细教程

1.打开PyCharm,新建工程MyMainTest 2.按照Tools-External Tools-QtDesigner,打开QT设计界面,保存窗体文件。

java8 lambda表达式实现自定义用户组件,Don't Repeat Yourself

2019独角兽企业重金招聘Python工程师标准>>> 一、用户组件的功能 使用java8 lambda表达式实现实现世界的一个例子&#xff1a;用户组件。此用户组件有以下几个操作&#xff1a;获取用户列表&#xff0c;获取单个用户&#xff0c;增加用户&#xff0c;删除用户&am…

如何在CDH5上部署Dolphin Scheduler 1.3.1

本文记录了在CDH5.16.2集群上集成Dolphin Scheduler 1.3.1的详细流程&#xff0c;特别注意一下MySQL数据库的连接串&#xff01; 1 文档编写目的 详细记录CDH5上Dolphin Scheduler 1.3.1的部署流程分布式部署Dolphin Scheduler 2 部署环境和依赖组件 为了适配CDH5上的Hive…

Kafka面试题全套整理 | 划重点要考!

做积极的人&#xff0c;而不是积极废人&#xff01;有很多人问过我要过Kafka相关的面试题&#xff0c;我一直懒得整理&#xff0c;这几天花了点时间&#xff0c;结合之前面试被问过的、别人咨询过的、我会问别人的进行了相关的整理&#xff0c;也就几十题&#xff0c;大家花个几…

PyQt5代码触发QTreeWidget的列表中某个item点击信号

https://blog.csdn.net/qq_37887537/article/details/80576844