我有一个十六进制值,例如0x0a010203,我想将其转换为字符串,以便在转换后它应该像“10.1.2.3”,如何从十六进制值中提取单个字段?
答案 0 :(得分:3)
您可以使用位屏蔽和位移,例如:
unsigned int val = 0x0a010203;
printf("%d.%d.%d.%d",
(val & 0xFF000000) >> 24,
(val & 0x00FF0000) >> 16,
(val & 0x0000FF00) >> 8,
val & 0x000000FF);
答案 1 :(得分:3)
填写struct in_addr
并使用inet_ntoa()
(“互联网地址为ASCII字符串”):
#include <arpa/inet.h>
struct in_addr addr;
addr.s_addr = htonl(0x0a010203); // s_addr must be in network byte order
char *s = inet_ntoa(addr); // --> "10.1.2.3"
请注意inet_ntoa()
返回的字符串可能指向可能被后续调用覆盖的静态数据。如果它只是打印然后没有打印就没有问题
已经用完了。否则,有必要复制字符串。