-1

我的问题是如何将IP号码的每一部分转换为三位数?例如127.0.0.1变成127.000.000.001

用 Python 等语言很容易做到,但我是 C 的新手,不知道如何处理它。

4

3 回答 3

0

打印带有“前导零”的整数如下:

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]);
于 2012-10-08T07:13:20.630 回答
0
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 中的零!

于 2012-10-08T07:20:01.537 回答
-1

您可以使用 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,".");
}

此链接可能对您有用...

于 2012-10-08T07:22:07.543 回答