将“192.2.0.1“转换为“192.002.000.001“

void tool_AddIpZero(char *ip, int len)
{
	char *p = NULL;
	int intIp[4] = {0};
	int i = 0;
	char buf[16] = {'\0'};
	memcpy(buf, ip, len);

	intIp[0] = atoi(buf);
	for (i = 1; i < 4; i++)
	{
		p = strstr(buf, ".");
		if (p != NULL)
		{
			intIp[i] = atoi(p + 1);
			p[0] = '0';/*清除已处理的'.'*/
		}
	}
	memset(buf, 0, sizeof(buf));
	snprintf(buf, sizeof(buf), "%03d.%03d.%03d.%03d", intIp[0], intIp[1], intIp[2], intIp[3]);
	memcpy(ip, buf, len);
}

这段代码的作用是将一个形如"xxx.xxx.xxx.xxx"的IP地址字符串中每个数值小于10的部分前面补零,例如将"192.2.0.1"转换为"192.002.000.001"。

具体的实现步骤如下:

  1. 首先,声明一个指针变量p,并初始化为NULL;同时声明一个整型数组intIp,并初始化元素为0。声明一个整型变量i,初始化为0。声明一个字符数组buf,并将其中元素都初始化为’\0’。

  2. 使用memcpy函数将ip字符串中长度为len的内容复制到buf中。

  3. 使用atoi函数将buf字符串中的第一个数字转换为整型,并将结果赋值给intIp[0]

  4. 进入循环,从i=1开始,遍历数组intIp中剩余的元素。

  5. 使用strstr函数在buf中查找第一个"."字符的位置,得到指向该位置的指针p

  6. 如果p不为NULL(即找到了"."字符),则将p+1处的字符转换为整型,并赋值给intIp[i]。然后将p[0]赋值为’0’,以清除已处理的’.'。

  7. 循环结束后,使用memset函数将buf中的内容全部清零。

  8. 使用snprintf函数格式化intIp数组中的各个元素,并将结果存储在buf中。

  9. 使用memcpy函数将buf中的内容复制回ip字符串。

总的来说,这段代码是一个将IP地址中部分数值小于10的部分前面补零的工具函数。

你可能感兴趣的:(C++,计算机,笔记,服务器)