C++ ipv4字符串转换成为32位整型值形式的ipv4地址
问题描述
给定ipv4字符串,可能含有数字,圆点,空格(需要进行处理)。 如“192. 168 . 1. 1 2 3 ”,要求将其做格式化成一个标准ipv4字符串,然后转换成为32位整型值形式的ipv4地址。
源代码如下
#include <iostream>
#include <vector>
#include <string>
#include <regex>//正则表达式库
using namespace std;
long long int GetIPV4(string s)
{
if (s.size() == 0)return 0;
int dotNum = 0;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == '.')
dotNum++;
}
if (dotNum != 3)return 0;
//根据指定条件进行字符串分割
regex ws_re("\\.");
vector<string> v(sregex_token_iterator(s.begin(), s.end(), ws_re, -1), sregex_token_iterator());
if (v.size() != 4)return 0;
regex pattern("\\s+");
long long int res = 0;
for (int i = 0; i < 4; i++)
{
long long int num = 0;
v[i] = regex_replace(v[i], pattern, "");
num = atoi(v[i].c_str());
if (i == 2)
num = num << 8;
else if (i == 1)
num = num << 16;
else if (i == 0)
num = num << 24;
res += num;
}
return res;
}