【Socket中 IP地址转换(inet_ntop、inet_pton)、字节序(htons(), htonl(), ntohs(), 和 ntohl() )】

在Socket编程中,inet_ntop、inet_pton 以及字节序转换函数(如 htons(), htonl(), ntohs(), ntohl())是非常重要的工具,用于处理IP地址和端口号的表示与转换。
很多时候,我容易记岔IP地址转换和字节序,所以以此加深印象。

先放总结

IP地址转换:二进制网络地址点分十进制文本之间的转换;
字节序转换:大端字节序(网络)小端字节序(可能是主机) 之间的转换;

inet_ntop 和 inet_pton

inet_ntop: 这个函数用于将网络地址结构(如 struct in_addr 对于IPv4,或 struct in6_addr 对于IPv6)转换为可读的字符串格式。

函数原型:
const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);

其中 af 是地址族(如 AF_INET 或 AF_INET6),src 是指向网络地址结构的指针,dst 是目标字符串的缓冲区,size 是目标缓冲区的大小。

inet_pton: 这个函数与 inet_ntop 相反,它用于将可读的字符串格式的IP地址转换为网络地址结构。

函数原型:
int inet_pton(int af, const char *src, void *dst);

其中 af 是地址族,src 是指向字符串IP地址的指针,dst 是指向网络地址结构的指针。

字节序转换函数

在网络编程中,字节序(也称为端序)是一个重要概念。大端序(Big-Endian)和小端序(Little-Endian)是两种主要的字节序。网络字节序是大端序,而主机字节序可能是大端序或小端序,这取决于具体的硬件和操作系统。

  1. htons(): 这个函数用于将无符号短整型(通常是端口号)从主机字节序转换为网络字节序。
  2. htonl(): 这个函数用于将无符号长整型(可能是IPv4地址或其他数据)从主机字节序转换为网络字节序。
  3. ntohs(): 这个函数与 htons() 相反,用于将无符号短整型从网络字节序转换为主机字节序。
  4. ntohl(): 这个函数与 htonl() 相反,用于将无符号长整型从网络字节序转换为主机字节序。

这些函数的名字中的 “h” 代表 “host”(主机),“n” 代表 “network”(网络),“s” 代表 “short”(短整型),“l” 代表 “long”(长整型)。

在编写跨平台的网络应用程序时,使用这些函数可以确保数据的正确表示和传输。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flos chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值