htonl()、htons()、ntohl()、ntohs()四个函数

主机字节顺序指的是在特定主机体系结构上整数的字节表示方式,而网络字节顺序是一种固定的大端字节顺序,用于在不同主机之间进行通信。

uint16_t htons(uint16_t hostshort);

htons的功能:将一个无符号短整型数值转换为网络字节序,即大端模式(big-endian)

参数u_short hostshort: 16位无符号整数

返回值:TCP / IP网络字节顺序

htons 是把你机器上的整数转换成"网络字节序", 网络字节序是 big-endian,也就是整数的高位字节存放在内存的低地址处。 而我们常用的 x86 CPU (intel, AMD) 电脑是 little-endian,也就是整数的低位字节放在内存的低字节处。举个例子吧。假定你的port是0x1234,在网络字节序里 这个port放到内存中就应该显示成addr addr+1,也就是:0x12 0x34;而在x86电脑上,0x1234放到内存中实际是:addr addr+1,也就是:0x34 0x12。htons 的用处就是把实际内存中的整数存放方式调整成"网络字节序"的方式。

其它三个函数类似.

详解C语言的htons函数 - 李秋 - 博客园 (cnblogs.com)

这四个函数在计算机网络编程中常用于进行主机字节顺序(Host Byte Order)和网络字节顺序(Network Byte Order)之间的转换。

  1. htonl()(Host to Network Long)函数用于将一个32位整数从主机字节顺序转换为网络字节顺序。

  2. htons()(Host to Network Short)函数用于将一个16位整数从主机字节顺序转换为网络字节顺序。

  3. ntohl()(Network to Host Long)函数用于将一个32位整数从网络字节顺序转换为主机字节顺序。

  4. ntohs()(Network to Host Short)函数用于将一个16位整数从网络字节顺序转换为主机字节顺序。

这些函数在不同的操作系统上可能会有一些细微的差别,但它们的目的都是为了处理网络数据的字节顺序转换,以确保在不同的主机上进行网络通信时能够正确解释数据的顺序。

相关推荐
家庭云计算专家10 分钟前
一键设置动态域名+ipv6内网直通访问ssh服务-家庭云计算专家
运维·docker·容器·云计算·ssh·onlyoffice
朝新_12 分钟前
【Linux操作系统】第一弹——Linux基础篇
linux·服务器·网络
椿融雪14 分钟前
基于muduo库实现高并发服务器
运维·服务器·muduo·网络库
wanhengidc17 分钟前
AI服务器通常会运用在哪些场景当中?
运维·服务器·人工智能
wanhengidc32 分钟前
我的世界云端服务器具体是指什么?
运维·服务器
翱翔的蠢猪33 分钟前
两台服务器之前共享文件夹
运维·服务器·文件挂载·共享文件夹
dancing9991 小时前
Golang的linux运行环境的安装与配置
linux·服务器·golang
YJII2 小时前
Docker封装深度学习模型
运维·docker·容器
THe CHallEnge of THe BrAve2 小时前
Linux-openeuler更换yum镜像源
linux·运维·服务器
泷羽Sec-pp3 小时前
DC-9靶机通关笔记
linux·运维·网络·笔记·docker·容器