LwIP IP 层常用函数和宏

1.将 4 字节数据组成 IP 地址
头文件:ip_addr.h

IP_ADDR4(ipaddr,a,b,c,d)

实现方法:

IP_ADDR4(ipaddr, a,b,c,d)  (ipaddr)->addr = PP_HTONL(LWIP_MAKEU32(a,b,c,d))

可以看出已经转换为网络字节序(H:主机字节序,N:网络字节序)
比如默认 IP 地址为 172.18.1.2,使用宏定义为:

/*默认网络参数*/
#define IP_ADDER0                           172
#define IP_ADDER1                           18
#define IP_ADDER2                           1
#define IP_ADDER3                           2

则转化为 lwIP IP 地址代码为:

ip_addr_t ipaddr;
IP4_ADDR(&ipaddr, IP_ADDER0, IP_ADDER1, IP_ADDER2, IP_ADDER3)

2.将字符串形式的 IP 地址转化为 32 位网络字节序整数
头文件:ip_addr.h

ipaddr_aton(cp, addr) 	

这是一个宏,展开相当于:

ip4addr_aton(const char *cp, ip4_addr_t *addr)

这个函数与 Socket 编程中的 inet_aton类似。成功时返回1,失败返回0

  • cp:需要转换的字符串形式 IP 地址(比如“172.18.1.2”)
  • addr:指向保存 lwIP IP 地址信息的结构体变量地址。

3.字节序转换
头文件:def.h

htons(x)		//主机字节序转网络字节序,16位
ntohs(x)		//网络字节序转主机字节序,16位
htonl(x)		//主机字节序转网络字节序,32位
ntohl(x)		//网络字节序转主机字节序,32位
  1. 小结
项目WindowsLinuxlwIP
协议族PF_INET
PF_INET6
同 Windows同 Windows
地址族AF_INET
AF_INET6
同 Windows同 Windows
字节序转换unsigned short htons(unsigned short)
unsigned short ntohs(unsigned short)
unsigned long htonl(unsigned long)
unsigned long ntohl(unsigned long)
同 Windows同 Windows
4 个单字节地址
组成网络字节序 IP
--IP_ADDR4(ipaddr,a,b,c,d)
字符串 IP 转为
32 位网络字节序
unsigned long inet_addr(const char *string)同 windownsipaddr_aton(const char *cp, Ip4_addr_t *addr)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值