如何将 32 位整数值转换为 IP 地址?
我有int value=570534080
并且想要将其转换为192.168.1.34
.
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(void) {
int value=570534080;
struct in_addr addr = {value};
printf( "%s", inet_ntoa( addr ) );
return 0;
}
测试:http: //ideone.com/RCDgj4
对于 Windows 使用#include <winsock2.h>
此处的 32 位整数570534080
, 可以拆分为四个 8 位无符号整数,它们就是 IP 地址。
int value = 570534080; // which is 0x2201a8c0 (0x22, 0x01, 0xa8, 0xc0)
unsigned char *ip = &value;
/* then */
ip[0] == 192;
ip[1] == 168;
ip[2] == 1;
ip[3] == 34;
请注意字节序(大字节序/小字节序),这使得@KerrekSB 的答案颠倒了。
编辑:
让我们更清楚一点。
在谈论 IP 地址和整数时,实际上我们关注两种类型的整数:
192.168.1.34
<==>(((192 * 256 + 168) * 256 + 1) * 256 + 34
570534080 <==> (0x22, 0x01, 0xa8, 0xc0)(on a little-endian machine) <==> (34.1.168.192)
:请注意,这是特定于平台且危险的!由于这依赖于整数的字节顺序,称为字节序。
再次编辑:
在这里,我会投票支持@DavidHeffernan 的评论,即使用inet_ntoa
.