IPv4地址转换成整数 | 您所在的位置:网站首页 › 6d转化为十进制 › IPv4地址转换成整数 |
题目描述: 存在一种虚拟IPv4地址,由4小节组成,每节的范围为0~255,以#号间隔,虚拟IPv4地址可以转换为一个32位的整数,例如: 128#0#255#255,转换为32位整数的结果为2147549183(0x8000FFFF) 1#0#0#0,转换为32位整数的结果为16777216(0x01000000) 现以字符串形式给出一个虚拟IPv4地址,限制第1小节的范围为1~128,即每一节范围分别为(1~128)#(0~255)#(0~255)#(0~255),要求每个IPv4地址只能对应到唯一的整数上。如果是非法IPv4,返回invalid IP 输入描述: 输入一行,虚拟IPv4地址格式字符串 输出描述: 输出以上,按照要求输出整型或者特定字符 补充说明: 输入不能确保是合法的IPv4地址,需要对非法IPv4(空串,含有IP地址中不存在的字符,非合法的#分十进制,十进制整数不在合法区间内)进行识别,返回特定错误 收起 示例1 输入: 100#101#1#5输出: 1684340997说明: 示例2 输入: 1#2#3输出: invalid IP#include #include #include #include using namespace std; bool GetSection(const string& strSec, int& nSec) { string strtmp; for (int i = 0; i < strSec.size(); i++) { if (strSec[i] < '0' || strSec[i] > '9') { return false; } strtmp += strSec[i]; } nSec = atoi(strtmp.c_str()); return true; } bool GetIp(const string& strIp, int64_t& nIp) { vector vec; istringstream iss(strIp); string tmp; while (getline(iss, tmp, '#')) { vec.push_back(tmp); } if (vec.size() < 4) { return false; } int s1 = 0; bool bRet = GetSection(vec[0], s1); if (!bRet || s1 == 0 || s1 > 128) { return false; } int s2 = 0; bRet = GetSection(vec[1], s2); if (!bRet || s2 > 255) { return false; } int s3 = 0; bRet = GetSection(vec[2], s3); if (!bRet || s3 > 255) { return false; } int s4 = 0; bRet = GetSection(vec[3], s4); if (!bRet || s4 > 255) { return false; } nIp = ((int64_t)s1 cout |
CopyRight 2018-2019 实验室设备网 版权所有 |