inet_addr和inet_ntoa函数

在socket编程中,通常会用到ip地址,为了便利编程,库函数中提供了两个函数inet_addr和inet_ntoa,前者将字符串转化为一个n_addr_t 类型的ip地址,供结构体使用,后者则是反过来,将一个in_addr的结构体转化为字符串。

测试代码

#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
int main()
{
    in_addr_t addr=inet_addr("192.168.1.100");
    printf("%d\n",addr);
    int x=(192<<0)+(168<<8)+(1<<16)+(100<<24);
    printf("%d\n",x);
    struct in_addr tt;
    tt.s_addr=x;
    printf("%s\n",inet_ntoa(tt));
    return 0;
} 

运行结果: 

 

 打印x表明了inet_addr将点分地址拼接的方式。

typedef uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
};

  所以其实in_addr_t本质上是uint32_t类型的,而结构体中也只有这么一个成员变量,算是理清楚了,但是总感觉把简单问题搞复杂了,在结构体中直接用uint32_t不会省事点嘛

posted @ 2020-03-28 15:18  castor_xu  阅读(1345)  评论(0编辑  收藏  举报