将整数值转换为ip-address

时间:2013-09-28 09:49:07

标签: c embedded

如何将32位整数值转换为ip-address?

我有int value=570534080并希望将其转换为192.168.1.34

2 个答案:

答案 0 :(得分:10)

#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>

答案 1 :(得分:2)

此处的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;    

请注意endian(big endian / little endian),这使得@ KerrekSB的答案发生逆转。

<强>编辑:

让我们更清楚。

在谈论IP地址和整数时,实际上我们关注的是两种类型的整数:

  1. IP地址的整数表示形式:192.168.1.34&lt; ==&gt; (((192 * 256 + 168) * 256 + 1) * 256 + 34
  2. 您接收并以32位整数解释的实际数据(可能是比特流),与此OP提供的内容类似:570534080 <==> (0x22, 0x01, 0xa8, 0xc0)(on a little-endian machine) <==> (34.1.168.192)
  3. 请注意,这是特定且危险的平台!因为这依赖于整数的字节顺序,称为字节序。

    重新编辑:

    在这里,我投票给@ DavidHeffernan的评论,即使用inet_ntoa