首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Socket中 IP地址转换(inet_ntop、inet_pton)、字节序(htons(), htonl(), ntohs(), 和 ntohl() )】

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

作者头像
flos chen
发布2026-01-23 17:50:22
发布2026-01-23 17:50:22
1580
举报

在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)转换为可读的字符串格式。
代码语言:javascript
复制
函数原型:
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地址转换为网络地址结构。
代码语言:javascript
复制
函数原型:
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”(长整型)。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先放总结
  • inet_ntop 和 inet_pton
    • inet_ntop: 这个函数用于将网络地址结构(如 struct in_addr 对于IPv4,或 struct in6_addr 对于IPv6)转换为可读的字符串格式。
    • inet_pton: 这个函数与 inet_ntop 相反,它用于将可读的字符串格式的IP地址转换为网络地址结构。
  • 字节序转换函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档