C++ 一个简单的判断子网掩码是否有效的函数

2023-05-16

简介

子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。

子网掩码是一个32位的2进制数, 其对应网络地址的所有位都置为1,对应于主机地址的所有位都置为0。所以,子网掩码是以连续的1+连续的0组成的,通过判断子网掩码中是否存在"01",可以判断子网掩码是否有效。

代码

#include <string>
#include <bitset>
#include <arpa/inet.h>

bool IsValidMask(std::string mask) {
    int iRet = -1;
    
    // 将IP地址由“点分十进制”转换成 “二进制整数”
    struct in_addr s;
    iRet = inet_pton(AF_INET, mask.c_str(), &s); 
    
    // 转换成功返回1,说明是有效的IP地址
     if (iRet == 1) {
         // 从网络字节顺序转换为主机字节顺序
         unsigned int addr = ntohl(s.s_addr);
         
         // 转换为二进制字符串
         std::bitset<32> b((int)addr);
        std::string strMask = b.to_string();
        
        // 查找二进制字符串中的"01",如果不存在,说明是有效的子网掩码
        return (strMask.find("01") == std::string::npos);
    }
    
    return false;
}

测试程序

#include <iostream>

int main()
{
    while(true) {
    // 输入子网掩码字符串
    std::cout << "Input Mask: " << std::endl;
    std::string strMask;
    std::cin >> strMask;
    
    // 判断字符串是不是有效的子网掩码
    if(IsValidMask(strMask)) {
            std::cout << "Valid!  " << std::endl << std::endl;
        } else {
            std::cout << "Invalid!" << std::endl << std::endl;
        }
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 一个简单的判断子网掩码是否有效的函数 的相关文章

随机推荐

  • 基于改进SSIM算法的图像清晰度识别

    文章目录 基于改进SSIM算法的图像清晰度识别1 SSIM算法流程2 SSIM算法实现3 信息熵函数4 图像测试流程5 测试结果总结 基于改进SSIM算法的图像清晰度识别 转载 xff1a https www heywhale com mw
  • 基于DCT算法的图像模糊检测

    文章目录 基于DCT算法的图像模糊检测1 离散余弦变换DCT2 基于离散余弦变换DCT来估计图像模糊度的图像质量评价算法总结 基于DCT算法的图像模糊检测 转载 xff1a https yinguobing com dct blur ima
  • 标注工具——VGG Image Annotator (VIA)

    VGG Image Annotator VIA VGG Image Annotator VIA 是一款开源的图像标注工具 xff0c 由Visual Geometry Group开发 地址 xff1a http www robots ox
  • 0gR2最大保护模式DataGuard创建 (转载)

    10gR2最大保护模式DataGuard创建 一 设置主库归档 设置主库为force logging SQL gt alter database force logging 设置主库为归档模式 xff1a SQL gt archive lo
  • PyTorch学习:对比CV2和PyTorch的预处理

    验证预处理一致性 span class token keyword import span os span class token keyword import span cv2 span class token keyword impor
  • word中删除分节符时页面格式会发生改变

    word中删除分节符时页面格式会发生改变 问题 xff1a word xff08 word2007 word2010 word2013 word2016等 xff09 删除分节符 xff08 下一页 xff09 以后 xff0c 分节符以前
  • Ubuntu终端代理工具——proxychains

    安装proxychains sudo apt install proxychains 配置proxychains 打开proxychains配置文件 sudo vim etc proxychains conf 在proxychains co
  • 只是因为多看了你一眼

    不得已的选择 高考 xff0c 应该是每个学生心中最难忘的一场考试了 xff0c 在过去十二年里有无数场大大小小的考试 xff0c 无论你过去是多么的优秀 xff0c 还是多么的差劲 xff0c 只要这一次你 xff0c 赢了就是赢了 xf
  • Cmake之CMakeLists.txt

    我们知道makefile是在Linux编译c或者c 43 43 代码的时候的一种脚本文件 xff0c 但是每一个功能都要写一个makefile文件 xff0c 这样如果这个工程很大 xff0c 而且相关性比较强的话 xff0c makefi
  • 【网络排故】能ping通但是不能ssh服务器

    花了一天时间找到了问题原因 xff0c 中途找厂商售后排故无果 xff0c 自己用时间啃出来的结果 问题现象 xff1a 某日下午同事突然告诉我某服务器 xff08 Error A xff09 无法访问了 xff0c 接着是一批服务无法访问
  • 10 | apt 常用操作命令

    目录 1 linux系统1 1 RedHat系列1 2 Debian系列 2 apt 命令2 1 列出所有可更新的软件清单命令2 2 升级软件包2 3 列出可更新的软件包及版本信息2 4 升级软件包 xff0c 升级前先删除需要更新软件包2
  • linux线程调度策略

    系统中既有分时调度 xff0c 又有时间片轮转调度和先进先出调度 学习这个主要为了在linux多线程中 xff0c 解决几条指令间延时在1 2ms内 xff1b 1 比如之前处理过 xff1a 给一个板子发送一个can指令 xff0c 接着
  • Linux 平台安装 VNC

    VNC一共有三个版本 xff0c TightVNC RealVNC UltraVNC xff0c RealVNC旨在推进商业化 xff0c 因此需要License xff1b TightVNC旨在改善服务器和查看器之间的VNC压缩 xff0
  • git push origin --tags失败,提示prohibited by Gerrit

    环境 xff1a linux 43 jenkins 43 gradle 情景 xff1a gradle 编译android包的时候 xff0c 希望Push tag到remote 服务器 xff0c 每次都失败在git push origi
  • PB编程:键盘enter默认触发和界面打开默认输入

    1 键盘enter默认触发 xff1a 键盘按下enter后 xff0c 触发某个按钮 在该界面的KEY事件中 xff0c 输入代码 xff1a if keydown keyenter then cb 1 triggerevent 34 c
  • Mininet

    部分转载自 负载均衡 常用命令 link s1 h2 downlink s1 h2 up通过 switch 选项跟 controller选项可以分别指定采用哪种类型的交换机跟控制器 xff0c 例如使用用户态的交换sudo mn switc
  • 我的2014

    我是一个双鱼座的女孩 xff0c 我很喜欢幻想 没事时总是会喜欢去想象自己的未来或者近期生活的样子 进入大学后 xff0c 我发现很多东西很多事都不是想象中的那么美好 大学生活不似想象中的那么简单轻松 xff0c 想要学好自己的专业 xff
  • 开源的文本标注工具

    开源的标注工具 自然语言处理标记工具汇总 https blog csdn net wangyizhen nju article details 94559607 spacy原来有两个标注工具 xff0c displaCy ent和displ
  • 网络虚拟化协议GENEVE

    去年看到过一篇文章 1 xff0c 说是通过OpenVSwitch的测试 xff0c GENEVE的性能要略优于VXLAN 我相信大多数人的反应可能跟我的第一反应一样 xff0c 这不又是一种Overlay协议吗 xff1f 为什么性能会更
  • C++ 一个简单的判断子网掩码是否有效的函数

    简介 子网掩码 subnet mask 又叫网络掩码 地址掩码 子网络遮罩 xff0c 它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网 xff0c 以及哪些位标识的是主机的位掩码 子网掩码不能单独存在 xff0c 它必须结合IP