如何在C中将`int`数组转换为IP地址字符串?

插口

我有一个int存储IP地址数组:

int ipArr[4] = {192,168,1,60}

我需要将上面定义的地址转换为类似的字符串"192.168.1.60"我尝试了sprintfstrcat函数,但是代码仍然非常麻烦。处理句点标点符号非常棘手。我的代码如下:

char srcIp[16];
int i=0,index=0;
for(i=0;i<4;i++){
   index+=sprintf(&srcIp[index],"%d",sourceIpInt[i]);
   if(i<3){
      index+=sprintf(&srcIp[index],"%c",'.');
    }
}

谁能提出更好的方法?

卡米拉·席维奇克(Kamila Szewczyk)

sprintf()在单个调用中而不是在执行循环时,使用单个格式来格式化所有ip地址八位位组更加简单容易

如果缓冲区可以是局部变量。

char buffer[16];
const int ip[4] = {172,0,0,1};

sprintf(buffer, "%d.%d.%d.%d", *ip, ip[1], ip[2], ip[3]);
printf("IP address is: %s", buffer);

或者,如果您需要使用动态内存,则可以执行以下操作。

char * buffer = malloc(16);
const int ip[4] = {172,0,0,1};

if(!buffer) {
    perror("malloc");
    exit(1);
}

sprintf(buffer, "%d.%d.%d.%d", *ip, ip[1], ip[2], ip[3]);
printf("IP address is: %s", buffer);

free(buffer);

在上面的代码中,我使用了动态内存分配来创建缓冲区并将sprintf数据写入其中。

请注意,malloc(16)-sizeof(char)根据定义等于1,因此我们不需要写malloc(sizeof(char) * 16)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章