htonl() 是否会更改 BIG ENDIAN 机器上的字节顺序?

2024-01-04

从字面上看,对 htonl() 感到困惑。在很多链接中,我发现执行 htonl 的代码是:

#define HTONL(n) (((((unsigned long)(n) & 0xFF)) << 24) | \
                  ((((unsigned long)(n) & 0xFF00)) << 8) | \
                  ((((unsigned long)(n) & 0xFF0000)) >> 8) | \
                  ((((unsigned long)(n) & 0xFF000000)) >> 24))

如果相同的代码在两台机器上运行,它将交换字节顺序。 示例:uint32_t a = 0x1;

关于小端:

地址值

100   1
101   0
102   0
103   0

在 htonl(a) 之后

地址值

100   0
101   0
102   0
103   1

=============================================在大端机器上:

地址值

100   0
101   0
102   0
103   1

在 htonl(a) 之后

地址值

100   1
101   0
102   0
103   0

这是否意味着 htonl() 将改变字节的顺序,而不管机器架构如何?


如果你正确使用它,那么它不应该在大端机器上交换字节。

htonl在特定于体系结构的标头中定义。通常情况下machine/endian.h将包含您的架构特定标头。如果您重新定义它,它将按照您设置的方式执行。如果您想要真实的行为,那么您应该始终使用正确的体系结构标头。在大端机器上,这是一个无操作。在小端机器上,它通常链接到特定的处理器指令。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

htonl() 是否会更改 BIG ENDIAN 机器上的字节顺序? 的相关文章

随机推荐

  • 在画布上挥动文字

    我怎样才能在画布元素上制作类似于上找到的文本this http www pageplugins com generators crazy text textwave php page EDIT Ben 忘记对你的问题无缘无故的反对票 并且
  • UWP - 在 NavigationViewItems 上设置 IsEnabled

    我有一个 UWP 应用程序NavigationView控制 导航项是通过设置创建的MenuItemsSource在 XAML 中转换为类型的对象集合NavigationViewElement
  • 将带有 VBA 宏的 Excel 图表复制并粘贴到 Word 中

    我知道我的问题可能听起来 微不足道 但我在任何地方都找不到解决方案 而且我已经筋疲力尽了 我正在编写一个宏来自动在 Word 中生成报告 在某个阶段 我需要插入一些图表 该图表位于 Excel 的图表工作表中 但没办法 这是我的代码 Sub
  • 如何使用 FTP 命令移动文件

    源文件的路径是 public html upload 64 SomeMusic mp3 我想将它移动到这条路径 public html archive 2011 05 64 SomeMusic mp3 我如何使用 FTP 命令执行此操作 在
  • WPF:选择时为文本框添加标签

    我想创建一个看起来像视觉工作室的简单设计器 具体来说 我希望我的项目具有与 VS 中相同的行为 当未选择它们时 会显示一个简单的标签 文本块 当它们被选择时 一个文本框可以让我编辑值 实现这一目标的最佳方法是什么 谢谢 为 TextBox
  • 如何在合并排序期间“暂停”以可视化 JS p5js

    我正在使用 p5 js 开发排序可视化工具 我需要知道是否可以减慢合并排序 以便可以更慢地绘制它 我目前正在尝试使用下面的睡眠功能来减慢它们的合并功能 但我得到 未捕获的类型错误 a slice 不是函数 我只是犯了一个愚蠢的错误 还是我错
  • 模板和 while 循环

    我正在制作一个简单的模板系统 无法将代码保留在 PHP 文件中并将其输出到 html 文件中 这很烦人 在模板中包含此内容不太好 h1 h1 p p 有什么方法可以将代码保留在 PHP 文件中吗 Thanks
  • 如何修改matplotlib-venn中的字体大小

    我有以下维恩图 from matplotlib import pyplot as plt from matplotlib venn import venn3 venn3 circles set1 set A B C D set2 set B
  • 已安装的 Python 模块 - Python 找不到它们

    这是一个初学者python安装问题 这是我第一次尝试安装和调用包 我有pip安装了 我尝试安装两个模块 numpy and pandas 在终端中 我运行了以下命令 sudo pip install numpy sudo pip insta
  • 我在哪里可以获得 delphi 或 python 的免费 G​​SM 库/组件?

    我在哪里可以获得好的免费 G SM 库Delphi or Python 我可以使用哪些库在我的应用程序上发送和接收短信 Gath 免费且开源AsyncPro http sourceforge net projects tpapro gt 不
  • 为离线Web应用程序存储图像数据(客户端存储数据库)

    我有一个使用 appcaching 的离线 Web 应用程序 我需要提供大约 10MB 20MB 的数据 它将保存 客户端 主要由 PNG 图像文件组成 操作如下 Web 应用程序下载并安装在 appcache 中 使用清单 Web 应用程
  • 如何使用Python将霍夫曼编码写入文件?

    我创建了一个 Python 脚本来使用霍夫曼算法压缩文本 假设我有以下字符串 string The quick brown fox jumps over the lazy dog 运行我的算法会返回以下 位 result 011111001
  • 四边形上的输出纹理不正确

    我正在尝试使用 freetype 在我的应用程序中显示文本 起初我认为这个内置函数 这对于用于绘制文本的库来说是很自然的 但只有一个显示符号的功能 然后我决定将这些字符一一放入纹理中 但我再次感到失望 所有指南一个纹理都使用单个图像 可能
  • React Native:无法构造变压器:错误:无法创建长度超过 0x1fffffe8 个字符的字符串

    包 json name project version 0 0 1 private true scripts android react native run android ios react native run ios start r
  • char*/字符串连接而不复制?

    我想在 C 或 C 中连接 2 个字符串 而不需要新的内存分配和复制 是否可以 可能的C代码 char str1 char malloc 100 char str2 char malloc 50 char str3 some code th
  • 如何使用PHP连接到as400

    我正在尝试使用以下代码将我的 AS400 与 V5R3 和 PHP 连接
  • 如何将打开的窗体定位在 C# Windows 窗体中的特定位置?

    The Location窗体中的属性设置为 0 0 属性窗口 但是 该表单不会在指定位置打开 我错过了什么吗 你需要设置StartPosition手动使表单将起始位置设置为中的值Location财产 public Form1 Initial
  • 在 Python 中将字符串分配给 ID

    我正在使用 python 读取一个文本文件 其格式为每列中的值可以是数字或字符串 当这些值是字符串时 我需要分配该字符串的唯一 ID 在同一列下的所有字符串中都是唯一的 如果同一字符串出现在同一列下的其他位置 则必须分配相同的 ID 什么是
  • Retrofit 2 同步调用错误处理 4xx 错误

    我正在使用 android priority jobqueue 并使用改造来同步调用我的其余 api 但我不确定如何处理诸如 401 Unauthorized 错误之类的错误 我会发回 json 来说明错误 进行异步调用时很简单 但我正在调
  • htonl() 是否会更改 BIG ENDIAN 机器上的字节顺序?

    从字面上看 对 htonl 感到困惑 在很多链接中 我发现执行 htonl 的代码是 define HTONL n unsigned long n 0xFF lt lt 24 unsigned long n 0xFF00 lt lt 8 u