使用 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 */
我把一个 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 */