我有一个 IP 地址,例如char *ip = "192.168.1.13"
需要转换成这个"13.1.168.192"
在 C 中是否已经存在适当的可能性,还是我必须通过简单地制作 token 并将它们重新放在一起来自己完成?
最佳答案
您始终可以使用 inet_pton
将其转换为二进制形式,使其易于逆向,然后使用 inet_ntop
转换回文本。
请记住,IPv4 地址只是一个 32 位无符号整数。交换其周围的字节非常容易。
像这样:
const char ip[] = "192.168.0.1";
char reversed_ip[INET_ADDRSTRLEN];
in_addr_t addr;
/* Get the textual address into binary format */
inet_pton(AF_INET, ip, &addr);
/* Reverse the bytes in the binary address */
addr =
((addr & 0xff000000) >> 24) |
((addr & 0x00ff0000) >> 8) |
((addr & 0x0000ff00) << 8) |
((addr & 0x000000ff) << 24);
/* And lastly get a textual representation back again */
inet_ntop(AF_INET, &addr, reversed_ip, sizeof(reversed_ip));
在此代码之后,变量 reversed_ip
包含字符串形式的反向地址。
关于转换 IP 以进行反向 ip 查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16373248/