0
点赞
收藏
分享

微信扫一扫

C++ ipv4字符串转换成为32位整型值形式的ipv4地址

小飞侠熙熙 2022-04-05 阅读 73

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;
}
举报

相关推荐

0 条评论