使用strtol()将IP地址从十六进制转换为十进制

时间:2016-04-14 19:26:36

标签: c ip hex decimal strtol

我从框架中将IP address放到struct:

unsigned char destination_address[4];

在我的主程序中,我加载了一个struct:

struct ipv4 naglowek_ipv4;
upakuj_ipv4(bufor_eth_ipv4, &naglowek_ipv4);

尝试以人类可读的格式显示这个":

printf("Destination Adress: %ld.%ld.%ld.%ld\n",
    strtol(naglowek_ipv4.destination_address[0],NULL,16),
    strtol(naglowek_ipv4.destination_address[1],NULL,16),
    strtol(naglowek_ipv4.destination_address[2],NULL,16),
    strtol(naglowek_ipv4.destination_address[3]));

这并没有显示出我认为的方式。有谁知道为什么?

1 个答案:

答案 0 :(得分:1)

destination_address不是字符串,只是四个字节的数组。因此,请简化您的呼叫:

printf("Destination Adress: %d.%d.%d.%d\n",
        naglowek_ipv4.destination_address[0],
        naglowek_ipv4.destination_address[1],
        naglowek_ipv4.destination_address[2],
        naglowek_ipv4.destination_address[3]);

你会注意到你是否包含strtol的声明(以及你没有将足够的参数传递给最后一次调用的事实):

#include <stdlib.h> /* provides strtol() function */