IPv4地址转换成整数 您所在的位置:网站首页 6d转化为十进制 IPv4地址转换成整数

IPv4地址转换成整数

2023-06-08 18:31| 来源: 网络整理| 查看: 265

题目描述:

存在一种虚拟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 实验室设备网 版权所有