我的问题是如何将IP号码的每一部分转换为三位数?例如127.0.0.1
变成127.000.000.001
用 Python 等语言很容易做到,但我是 C 的新手,不知道如何处理它。
打印带有“前导零”的整数如下:
int i = 9;
printf("%03i", i); // prints 009
因此,如果说您的 IP 存储为 4 个字节,您可以尝试:
char ip[4] = {...};
printf("%03i.%03i.%03i.%03i", (int)ip[0], (int)ip[1], (int)ip[2], (int)ip[3]);
char ip1[] = "127.0.0.1";
int a1, a2, a3, a4;
sscanf(ip1, "%i.%i.%i.%i", &a1, &a2, &a3, &a4);
char ip2[16];
snprintf(ip2, sizeof(ip2), "%03i.%03i.%03i.%03i", a1, a2, a3, a4);
忘记了 snprintf 中的零!
您可以使用 1. strtok 和 2. 使用 strchr 或 strstr 对字符串进行标记,而不是使用这些标记,您可以检查长度并进行所需的处理。
例如(使用 strtok)有一些变化可以使用 strchr 或 strstr
char s[]="127.0.0.1";
char *tokens = strtok(s,".");
while(tokens != NULL)
{
if(strlen(tokens)!=3){
//insert zeros till the length is not 3
}
tokens=strtok(NULL,".");
}
此链接可能对您有用...