将IP编号的每一部分转换为C中的三位数字

将IP编号的每一部分转换为C中的三位数字,c,ip,digits,C,Ip,Digits,我的问题是如何将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],

我的问题是如何将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]);

忘记了snprintf中的零

您可以使用1标记字符串。斯特托克和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,".");
}

可能对你有用

使用sscanf提取整数,然后snprintf返回一个字符串,格式为%3i。这真的不是很有帮助。。。数组中没有空间“插入”任何内容,并且不确定OP是否有一个字符串作为开始输入。您可以使用哪种其他格式存储127.0.0.1。。。剩下的唯一选项是数组(IMHO),如果OP在数组中有IP,那么他们在添加前导零时不会有任何问题。。。你可能是对的,但是否决票太苛刻了。。
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,".");
}