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

Convert IP address from hex to dec using strtol()

我把一个 IP address 从框架到结构:

unsigned char destination_address[4];

在我的主程序中我加载了一个结构:

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

并尝试在 "human-readable format" 中显示:

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]));

这没有按照我认为的方式显示。有人知道为什么吗?

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 */