点分十进制IP转换为32位二进制IP,带合法性校验

首先给出校验方法,遍历字符串,对 ‘.’ 进行计数,同时以 ‘.’ 作为分隔,取出每一段的数字,在 ‘.’ 的数量是合法的 3 个情况下,对每一段数字进行大小检查,都通过返回 TRUE,否则返回 FALSE

函数传递的参数中,IP 为需要转换的字符串,DecIP为每一段数字组成的字符串数组,Num为校验通过后生成的数字,用于下一步转换成二进制

写到这里好像注意到DecIP这个参数后面没用到,可以定义到函数内作为局部变量,有空再改

bool IPTransAndCheck(std::string IP,std::string DecIP[4],int Num[4])
{int pointCount = 0;int Cursor = 0;int temCursor = Cursor;std::string::iterator pIP = IP.begin();while (pIP != IP.end()){if ((*pIP < '0' || *pIP > '9') && *pIP != '.'){return false;}Cursor++;if (*pIP == '.'){DecIP[pointCount] = IP.substr(temCursor, Cursor - 1);pointCount++;temCursor += Cursor;Cursor = 0;}++pIP;}DecIP[pointCount] = IP.substr(temCursor, Cursor);if (pointCount != 3){return false;}else{for (int i = 0; i < 4; i++){if (0 > atoi(DecIP[i].c_str()) || atoi(DecIP[i].c_str()) > 255){return false;}Num[i] = atoi(DecIP[i].c_str());}return true;}
}

以上通过了校验获取了字符串中的每一段数字后,先将其转换为二进制,然后将每一段转换后的二进制数补齐 8 位,再通过字符串拼接返回输出
二进制转换:long long DecToNBase(int dec,int NBase)

std::string FinalTrans(int Num[4])
{int ZeroCount = 8;std::string str;std::string tempstr;std::string Completionstr;long long IPNum;for (int i = 0; i < 4; i++){IPNum = DecToNBase(Num[i], 2);tempstr = std::to_string(IPNum);if (tempstr.length() < ZeroCount){Completionstr = std::string(ZeroCount - tempstr.length(), '0') + tempstr;}else{Completionstr = tempstr;}str += Completionstr;}return str;
}

验证

int main()
{std::string str = "10.170.66.66";std::string DecIP[4];int Num[4];std::string Finalstr;if (IPTransAndCheck(str, DecIP, Num)){Finalstr = FinalTrans(Num);std::cout << Finalstr;return 0;}else{std::cout << "ERROR";}
}

输出

00001010101010100100001001000010

2021/4/5

点分十进制IP转换为32位二进制IP,带合法性校验相关推荐

  1. 十进制点分IP转换为32位二进制IP

    十进制点分IP转换为32位二进制IP #include<iostream> using namespace std; int main() {char ch[33];char s[100] ...

  2. C++ 十进制点分IP转换为32位二进制IP

    题目内容: 编写程序,将十进制点分的IP转换为32位二进制IP地址.程序要能验证输入的十进制点分IP地址的合法性.用户输入的IP不和法时,输出"data error". 请使用模块 ...

  3. 十进制点分IP转换为32位二进制IP(C++)

    题目详情 编写程序,将十进制点分的IP转换为32位二进制IP地址.程序要能验证输入的十进制点分IP地址的合法性.用户输入的IP不和法时,输出"data error". 请使用模块化 ...

  4. C语言笔记:进制转换与32位二进制IP地址转换十进制问题

    问题描述: 假设需要编写一个程序,实现32位二进制IP地址(32个字符长的1和0)转换为点分十进制格式并输出.IP地址的点分十进制格式通过将32位从低位到高位(右到左)一次分组八位,总共分4次,任何8 ...

  5. 整型转换为32位二进制字符串

    记录下整型转换为32位二进制字符串的两种方式. 一.返回string 类型 char digits[] = {'0','1','2','3','4','5','6','7','8','9','a',' ...

  6. 将32位的ip二进制串转换为十进制

    /******************** 将32位的ip二进制串转换为十进制 **************************/ #define MAX 32 #include<stdio ...

  7. 点分十进制字符串IP和32位int整数互转Java实现

    点分十进制字符串IP和32位int整数互转Java实现 比较简单基础的题,可记录和回顾基础. IPv4(4*8)和32位的int整数刚好可以11映射,但由于int整数是有符号的,所以不能直接通过划分为 ...

  8. 通过Python实现4字节32位二进制转换为十进制单精度浮点数

    与底层设备做通讯,无论是串行通讯还是TCP,经常遇到以字节形式传输的数据格式,得到底层报文后的数据解析就成了重点. 这个百度求解的过程真是一言难尽,大部分都是复制粘贴,不知所云. 这里将最终结果记录一 ...

  9. 十进制转32位二进制(Java)

    十进制转32位二进制(Java) 十进制转32位二进制(Java) 一.题目 二.代码实现 三.测试结果 十进制转32位二进制(Java) 一.题目 输入一个正整数N,输出一个32位的二进制数(例如输 ...

  10. 计算机十进制转为八位二进制,Java将十进制转换为8位二进制(Java convert from decimal to 8-bit binary)...

    Java将十进制转换为8位二进制(Java convert from decimal to 8-bit binary) 我写了简单的java代码来从十进制转换为8位二进制:抱歉这个愚蠢的问题 1 in ...

最新文章

  1. Arrays类、大数据运算
  2. 用什么写php最好用,php用什么开发工具比较好
  3. 实现一个vue的图片预览插件
  4. 卷积层数据放大_卷积神经网络重要回顾
  5. android IntentService
  6. Critical error detected c0000374
  7. linux下杀毒工具clamav
  8. mysql st_contains实现_MySQL实现树状所有子节点查询的方法
  9. Java多线程面试题总结,Java岗
  10. 基于LSTM的中文文本多分类
  11. Liferay layout_configuration 分析
  12. Exce批量发送邮件功能:发件人设置的操作
  13. 【车间调度】帝国企鹅算法求解柔性车间调度问题【含Matlab源码 1991期】
  14. Python3:私有成员
  15. 中国市场 Android App 兼容性报告
  16. 1.7 URL与端点
  17. 头指针,头结点,首元结点的区别,头结点的优点
  18. Qt(mingw)+GDAL位图转矢量图写入shp或json文件
  19. 查找SAPParameterID_SAP刘梦_新浪博客
  20. 蓝牙核心技术概述(五):蓝牙协议规范(irOBEX、BNEP、AVDTP、AVCTP)

热门文章

  1. 《硅谷钢铁侠:埃隆·马斯克的冒险人生》文摘
  2. 宏碁e5-572g重装linux,Acer-E5-572G笔记本U盘装原版win10系统教程
  3. 关于epub格式电子书和PC上的ePub阅读器...
  4. 互联网企业安全高级指南3.9 关于ISO27001
  5. ASP.NET超市便利店在线购物商城源码,针对周边配送系统
  6. java我行我素购物系统_用java怎么编写 我行我素shopping购物管理体统
  7. 很抱歉,程序无法在非MBR引导分区上进行激活
  8. 安卓 多条通知_【安卓+苹果】石头阅读,全网小说、漫画免费看,最好用的追书神器!...
  9. iOS 开发 XMPP即时通讯项目开发(仿微信)-详解之XMPP入门
  10. 2021 浏览器edge改 ie11 模式