C++网络编程(二)字节序与IP地址转换

字节序转换函数

核心函数介绍

BSD Socket提供了专门的字节序转换接口,用于主机字节序与网络字节序之间的转换:

转换函数分类:​

  • htons()- 主机到网络的16位整数转换(用于端口号)

  • htonl()- 主机到网络的32位整数转换(用于IPv4地址)

  • ntohs()- 网络到主机的16位整数转换

  • ntohl()- 网络到主机的32位整数转换

函数命名规则解析

  • h= host(主机字节序)

  • n= net(网络字节序)

  • s= unsigned short(16位无符号整数)

  • l= unsigned int(32位无符号整数)

使用场景

#include <arpa/inet.h>

// 端口转换示例(16位)
uint16_t port = 8080;
uint16_t net_port = htons(port);

// IP地址转换示例(32位)
uint32_t ip_addr = inet_addr("192.168.1.1");
uint32_t net_ip = htonl(ip_addr);

IP地址转换函数

inet_pton函数

将字符串形式的IP地址转换为网络字节序的整型数:

函数原型:​

int inet_pton(int af, const char *src, void *dst);

参数说明:​

  • af:地址族协议(AF_INET用于IPv4,AF_INET6用于IPv6)

  • src:源字符串IP地址

  • dst:目标缓冲区,存储转换后的大端IP地址

返回值:​

  • 成功返回1

  • 失败返回-1

inet_ntop函数

将网络字节序的整型IP地址转换回字符串形式:

函数原型:​

const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);

参数说明:​

  • af:地址族协议

  • src:源大端整型IP地址

  • dst:目标字符串缓冲区

  • size:目标缓冲区大小(防止缓冲区溢出)

返回值:​

  • 成功返回指向dst的指针

  • 失败返回NULL

实际应用要点

1. 网络通信必备步骤

  • 发送数据前:使用htonl/htons将本地数据转换为网络字节序

  • 接收数据后:使用ntohl/ntohs将网络数据转换回主机字节序

2. IP地址处理最佳实践

// 字符串IP转网络字节序
struct in_addr addr;
inet_pton(AF_INET, "192.168.1.1", &addr);

// 网络字节序转字符串IP
char ip_str[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &addr, ip_str, sizeof(ip_str));

3. 注意事项

  • 始终检查函数返回值,确保转换成功

  • 为字符串缓冲区预留足够空间(INET_ADDRSTRLEN为16字节)

  • 明确指定地址族协议(AF_INET或AF_INET6)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值