当前位置: 首页 > news >正文

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)

http://www.dtcms.com/a/452949.html

相关文章:

  • 从零开始XR开发:Three.js实现交互式3D积木搭建器
  • 如何解决网站只收录首页的一些办法wordpress多站点内容聚合
  • 个人备忘录的设计与实现
  • 删除cad无关线条 的ppo 随手记
  • Python AI编程在微创手术通过数据分析改善恢复的路径分析(下)
  • 深度学习之神经网络1(Neural Network)
  • pycharm下创建flask项目,配置端口问题
  • 计算机科学中的核心思想与理论
  • SpringCloud,vue3应用使用AlibabaCloudToolkit自动化部署到远程服务器上的docker
  • 如何从RSSI和SNR 判断现场的LoRaWAN的信号质量?
  • 【万字解读】品牌SEO实战指南:7步打造AI时代的搜索权威
  • 网站短期就业培训班开发公司总经理管理方案
  • GitHub 热榜项目 - 日榜(2025-10-07)
  • TDengine 比较函数 NULLIF 用户手册
  • SSM面试题学习
  • 网站建设练手项目我是做装修什么网站可以
  • Effective Python 第41条:考虑用mix-in类来表示可组合的功能
  • STM32独立看门狗IWDG与窗口看门狗WWDG知识梳理笔记
  • HTML-CSS-JS-入门学习笔记
  • 基于 MacOS 的Rokid 开发本地环境搭建指南
  • 以前的计算集群:Beowulf集群(贝奥武夫集群)
  • 软件开发中前端页面、后台管理页面、后端、数据中台的关系与开发流程
  • 政务微网站建设方案wordpress在线版本
  • TypeScript 循环
  • 【征文计划】JSAR实战:从零开始的空间小程序开发之旅
  • 用A4打印机1:1打印A3试卷(A3 pdf切割)
  • 知识体系_大数据框架环境搭建_虚拟机环境准备
  • 个人网站设计的参考文献网站建设制作解决方案
  • 《什么是Redis?》
  • soular入门到实战(4) - 如何通过工作台聚合TikLab所有工具链