官方服务微信:dat818 购买与出租对接

网络通信中的大端序与小端序:字节序转换与htons函数详解

2万

主题

2

回帖

7万

积分

管理员

积分
73296
发表于 2025-4-1 21:43:02 | 显示全部楼层 |阅读模式
    一、什么是网络字节序

    低位字节数据会存储到高地址处。

    不同的计算机架构中,字节序可能存在差异。像 Intel x86 架构一般是小端序。另外一些架构通常是大端序。为避免不同架构间出现数据传输问题,像网络协议(如 TCP/IP)就规定使用大端序当作网络字节序。

    二、字节序转换 1)主机字节序转换为网络字节序

    htons 函数用于进行主机字节序到网络字节序的转换。htonl 函数也用于将主机字节序转换为网络字节序。

    htons函数(Host to  Short)

    作用:用于将16位整数从主机字节序转换为网络字节序。

    htonl函数(Host to  Long)

    作用:用于将32位整数从主机字节序转换为网络字节序。

    代码示例:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre><code class="language-cpp">#include <stdio.h>
#include <a style='color:#0000CC;font-size:15px;' rpa/inet.h>
int main()
{


    uint16_t hostShort = 0x1234;
定义了一个无符号 32 位整数变量 hostLong,其值为 0x12345678。
定义一个无符号 16 位整数 netShort;将 hostShort 通过网络字节序转换函数 htons 进行转换,转换后的结果赋值给 netShort 。
将主机长整型数 hostLong 转换为网络字节序的无符号 32 位整数 netLong ,通过 htonl 函数来实现 。
printf("原始短:0xx,网络短:0xx\n", hostShort, netShort);
printf("Original long 为 0xx,Network long 为 0xx。", hostLong, netLong);
    return 0;
}</code></pre></p>
    本计算机是小端存储字节,像 Intel x86 架构通常采用小端序。因为此原因,网络字节序和本机字节序是相反的。

    2)网络字节序转换为主机字节序

    ntohs 函数用于进行主机字节序到网络字节序的转换;htonl 函数也用于将主机字节序转换为网络字节序。

    ntohs函数( to )

   


    作用:用于将16位整数从网络字节序转换为主机字节序。

    ntohl函数( to Host Long)

    作用:用于将32位整数从网络字节序转换为主机字节序。

    代码示例:在上述代码的基础上往下写。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre><code class="language-cpp">将网络字节序的 short 类型数据转换为主机字节序的 short 类型数据,得到 backShort,其中 netShort 为网络字节序的 short 类型数据,通过 ntohs 函数进行转换。
获取网络字节序的长整型数据 netLong ,然后将其转换为主机字节序的无符号 32 位整型数据 backLong ,转换过程通过 ntohl 函数实现。
printf 函数输出了两个信息,一个是“Network short:0xx”,另一个是“Back to original:0xx”,并且分别对应着变量 netShort 和 backShort 的值。
printf 函数输出以下内容:"Network long:0xx",同时输出 "Back to original:0xx",并且分别传入参数 netLong 和 backLong。</code></pre></p>
    运行结果:可以看到网络字节序和主机字节序是相反的。

    总结:

    通过上述代码,你能够实现并使用 htons 函数、htonl 函数、ntohs 函数和 ntohl 函数,以在主机字节序与网络字节序之间进行转换。这些函数在对网络数据包进行处理时是很有用的,尤其在涉及跨平台通信的情形下。运用标准库函数能够保证代码的可移植性与兼容性。

更多帖子推荐

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|小黑屋|关于我们

Copyright © 2001-2025, Tencent Cloud.    Powered by Discuz! X3.5    京ICP备20013102号-30

违法和不良信息举报电话:86-13718795856 举报邮箱:hwtx2020@163.com

GMT+8, 2025-4-12 19:13 , Processed in 0.084076 second(s), 18 queries .