点分十进制IP转换为32位二进制IP,带合法性校验
点分十进制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,带合法性校验相关推荐
- 十进制点分IP转换为32位二进制IP
十进制点分IP转换为32位二进制IP #include<iostream> using namespace std; int main() {char ch[33];char s[100] ...
- C++ 十进制点分IP转换为32位二进制IP
题目内容: 编写程序,将十进制点分的IP转换为32位二进制IP地址.程序要能验证输入的十进制点分IP地址的合法性.用户输入的IP不和法时,输出"data error". 请使用模块 ...
- 十进制点分IP转换为32位二进制IP(C++)
题目详情 编写程序,将十进制点分的IP转换为32位二进制IP地址.程序要能验证输入的十进制点分IP地址的合法性.用户输入的IP不和法时,输出"data error". 请使用模块化 ...
- C语言笔记:进制转换与32位二进制IP地址转换十进制问题
问题描述: 假设需要编写一个程序,实现32位二进制IP地址(32个字符长的1和0)转换为点分十进制格式并输出.IP地址的点分十进制格式通过将32位从低位到高位(右到左)一次分组八位,总共分4次,任何8 ...
- 整型转换为32位二进制字符串
记录下整型转换为32位二进制字符串的两种方式. 一.返回string 类型 char digits[] = {'0','1','2','3','4','5','6','7','8','9','a',' ...
- 将32位的ip二进制串转换为十进制
/******************** 将32位的ip二进制串转换为十进制 **************************/ #define MAX 32 #include<stdio ...
- 点分十进制字符串IP和32位int整数互转Java实现
点分十进制字符串IP和32位int整数互转Java实现 比较简单基础的题,可记录和回顾基础. IPv4(4*8)和32位的int整数刚好可以11映射,但由于int整数是有符号的,所以不能直接通过划分为 ...
- 通过Python实现4字节32位二进制转换为十进制单精度浮点数
与底层设备做通讯,无论是串行通讯还是TCP,经常遇到以字节形式传输的数据格式,得到底层报文后的数据解析就成了重点. 这个百度求解的过程真是一言难尽,大部分都是复制粘贴,不知所云. 这里将最终结果记录一 ...
- 十进制转32位二进制(Java)
十进制转32位二进制(Java) 十进制转32位二进制(Java) 一.题目 二.代码实现 三.测试结果 十进制转32位二进制(Java) 一.题目 输入一个正整数N,输出一个32位的二进制数(例如输 ...
- 计算机十进制转为八位二进制,Java将十进制转换为8位二进制(Java convert from decimal to 8-bit binary)...
Java将十进制转换为8位二进制(Java convert from decimal to 8-bit binary) 我写了简单的java代码来从十进制转换为8位二进制:抱歉这个愚蠢的问题 1 in ...
最新文章
- Arrays类、大数据运算
- 用什么写php最好用,php用什么开发工具比较好
- 实现一个vue的图片预览插件
- 卷积层数据放大_卷积神经网络重要回顾
- android IntentService
- Critical error detected c0000374
- linux下杀毒工具clamav
- mysql st_contains实现_MySQL实现树状所有子节点查询的方法
- Java多线程面试题总结,Java岗
- 基于LSTM的中文文本多分类
- Liferay layout_configuration 分析
- Exce批量发送邮件功能:发件人设置的操作
- 【车间调度】帝国企鹅算法求解柔性车间调度问题【含Matlab源码 1991期】
- Python3:私有成员
- 中国市场 Android App 兼容性报告
- 1.7 URL与端点
- 头指针,头结点,首元结点的区别,头结点的优点
- Qt(mingw)+GDAL位图转矢量图写入shp或json文件
- 查找SAPParameterID_SAP刘梦_新浪博客
- 蓝牙核心技术概述(五):蓝牙协议规范(irOBEX、BNEP、AVDTP、AVCTP)
热门文章
- 《硅谷钢铁侠:埃隆·马斯克的冒险人生》文摘
- 宏碁e5-572g重装linux,Acer-E5-572G笔记本U盘装原版win10系统教程
- 关于epub格式电子书和PC上的ePub阅读器...
- 互联网企业安全高级指南3.9 关于ISO27001
- ASP.NET超市便利店在线购物商城源码,针对周边配送系统
- java我行我素购物系统_用java怎么编写 我行我素shopping购物管理体统
- 很抱歉,程序无法在非MBR引导分区上进行激活
- 安卓 多条通知_【安卓+苹果】石头阅读,全网小说、漫画免费看,最好用的追书神器!...
- iOS 开发 XMPP即时通讯项目开发(仿微信)-详解之XMPP入门
- 2021 浏览器edge改 ie11 模式