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不会省事点嘛