问题标签 [endianness]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
91626 浏览

unicode - Big Endian 和 Little Endian 字节顺序的区别

Big Endian 和 Little Endian Byte order 有什么区别?

这两者似乎都与 Unicode 和 UTF16 有关。我们究竟在哪里使用它?

0 投票
8 回答
11488 浏览

c - 在位域结构上转换字节序

我需要将位域结构从小端架构转换为大端架构。如果我只是交换结构元素,那么最好的方法是什么,因为字节边界会出现问题。

防爆结构为:

0 投票
4 回答
192 浏览

endianness - 20年后的兼容性问题还会存在20年吗?

由于 CR/LF、不同的斜线类型或 Big Endian 与 Little Endian 错误,没有什么能比您生命中的第 43 天更重要的了。这些问题已经存在 20 年了,它们让我觉得人类仍然是穴居人。我们只是将这些旧问题替换为新问题吗?XML 提供了帮助,但这些问题不是让公司花费数百万的时间、金钱和精力吗?是否是一个促进供应商锁定的阴谋?

0 投票
17 回答
89741 浏览

c++ - C ++中的64位ntohl()?

的手册页htonl()似乎建议您最多只能将其用于 32 位值。(实际上,ntohl()是为 unsigned long 定义的,在我的平台上是 32 位。我想如果 unsigned long 是 8 个字节,它将适用于 64 位整数)。

我的问题是我需要将 64 位整数(在我的情况下,这是一个 unsigned long long)从大端转换为小端。现在,我需要进行特定的转换。ntohl()但是,如果目标平台是大端序时函数(如)不会转换我的 64 位值,那就更好了。(我宁愿避免添加我自己的预处理器魔法来做到这一点)。

我可以使用什么?如果它存在,我想要一些标准的东西,但我愿意接受实施建议。我在过去看到过这种类型的转换使用联合。我想我可以有一个 unsigned long long 和一个 char[8] 的联合。然后相应地交换字节。(显然会在大端平台上中断)。

0 投票
3 回答
2900 浏览

perl - 在 Perl 中将分组的十六进制字符转换为位串

我有一些 256 个十六进制字符的字符串,它们代表一系列位标志,我正在尝试将它们转换回位字符串,以便我可以使用&|等来操作它们vec。十六进制字符串被写入整数范围的大端组,这样一组 8 个字节"76543210"应该转换为 bitstring "\x10\x32\x54\x76",即最低 8 位是00001000

问题是pack''h格式一次只处理一个字节的输入,而不是 8 个字节,因此直接使用它的结果不会按正确的顺序排列。目前我正在这样做:

这有效,但感觉很hackish。好像应该有更干净的方法,但我的pack-fu不是很强。有没有更好的方法来做这个翻译?

0 投票
8 回答
33851 浏览

c++ - 如何将大端结构转换为小端结构?

我有一个在 Unix 机器上创建的二进制文件。只是一堆又一张的记录而已。记录定义如下:

我试图弄清楚如何在 Windows 机器上读取和解释这些数据。我有这样的事情:

我得到了一堆数据,但这不是我期望的数据。我怀疑我的问题与机器的字节序差异有关,所以我来问这个问题。

我知道多个字节将存储在 windows 上的 little-endian 和 unix 环境中的 big-endian 中,我明白了。对于两个字节,Windows 上的 0x1234 将是 unix 系统上的 0x3412。

字节序会影响整个结构的字节顺序,还是影响结构中每个单独成员的字节顺序?我将采取什么方法将在 unix 系统上创建的结构转换为在 Windows 系统上具有相同数据的结构?任何比几个字节的字节顺序更深入的链接也会很棒!

0 投票
6 回答
7494 浏览

c - 为什么 8 位字段具有字节顺序?

参见 /netinet/tcp.h 中 TCP 头的定义:

为什么 8 位字段在字节序中具有不同的顺序?我认为只有 16 位和 32 位字段与字节顺序有关,您可以分别使用 ntohs 和 ntohl 在字节序之间进行转换。处理 8 位事物的功能是什么?如果没有,那么在小端机器上使用此标头的 TCP 似乎不适用于大端机器上的 TCP。

0 投票
9 回答
13112 浏览

c - 支持 Linux 用户空间中的字节排序

我正在用 C 语言在 Linux 上编写一个程序来分析嵌入式系统生成的核心文件。核心文件可能是小端 (ARM) 或大端 (MIPS),分析它们的程序可能在小端主机 (x86) 或大端 (PowerPC) 上运行。

通过查看标题,我知道核心是 LE 还是 BE。我宁愿我的程序不需要知道它运行的主机是小端还是大端,我想使用 API 为我处理它。如果没有更好的选择,我想我会开始依赖#ifdef __BIG_ENDIAN__。

在 Linux 内核中,我们有 cpu_to_le32 等人将本机字节顺序转换为小端等。在用户空间中有 htonl 等人,它们从本机转换为大端,但我找不到本地到小端的等价物。

任何人都可以为用户空间推荐一个合适的 API 吗?

编辑:为了清楚起见,我正在寻找一个 API,它已经知道我的 CPU 是大端还是小端并相应地交换字节。我不想为此用#ifdefs 乱扔我的代码。我不只是在寻找代码片段来交换字节;谢谢你,但这不是重点。

0 投票
6 回答
4503 浏览

.net - 为什么 BinaryReader.ReadUInt32() 反转位模式?

我正在尝试使用 BinaryReader 类读取二进制文件,我需要将其作为 UInt32 块读取,然后进行一些位移等。

但是,由于某种原因,当我使用 ReadUInt32 方法时,位顺序颠倒了。

例如,如果我有一个文件,其中前四个字节在 hex, 中看起来像这样0x12345678,它们在被 ReadUInt32: 读取后最终是这样的0x78563412

如果我使用 ReadBytes(4) 方法,我会得到预期的数组:

为什么是这样?它只是 .net 表示内存中的 uint 的方式吗?在不同平台上是否相同(我运行的是 64 位 Windows 7、.net 3.5 sp1)?

0 投票
5 回答
6909 浏览

endianness - 不同字节序有什么好处?

为什么有些处理器制造商决定使用

  • 小端
  • 大端
  • 中端
  • 还有其他人吗?

?

我听说如果一个数字是负数还是正数,大端可以更快地找出,因为那个位是第一个。(这在现代 CPU 上无关紧要,因为无法再访问单个位。)