问题标签 [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.
python - 带字节序转换的 Python File Slurp
最近有人问如何在 python 中执行文件 slurp,并且接受的答案建议如下:
我将如何执行此操作以读取文件并转换数据的字节序表示?
例如,我有一个 1GB 的二进制文件,它只是一堆打包为大端序的单精度浮点数,我想将它转换为小端序并转储到一个 numpy 数组中。下面是我为完成此任务而编写的函数以及调用它的一些真实代码。我使用struct.unpack
进行字节序转换并尝试使用mmap
.
那么我的问题是,我是否正确使用 slurp 和mmap
and struct.unpack
?有没有更清洁、更快的方法来做到这一点?现在我有什么作品,但我真的很想学习如何做得更好。
提前致谢!
endianness - 无论 PPC 字节序如何处理 Altivec 加载和存储?
我在 Altivec 中有一些 SIMD 代码并行处理 32 位整数值。在某些情况下,我想将整数加载为小端,在其他情况下加载为大端(注意:此选择与本机 CPU 字节序无关;它基于正在运行的算法)。正如Apple所记录的,使用 Altivec 的置换操作非常容易进行实际的字节交换。
我担心的部分是PowerPC允许大端或小端操作,所以我不知道我是否需要在小端加载/存储或大端加载/存储上进行字节交换。(目前我的代码总是为小端执行它,并且从不交换大端内存操作,这在我目前使用的 970 上运行良好,因为它当然运行的是大端)。
据我所知,小端模式下的 PPC 相对较少,但它们确实存在,理想情况下,我希望无论模式如何,我的代码都能正确快速地工作。
有没有一种方法可以处理对 AltiVec 寄存器的大小字节序负载,而不管 CPU 字节序如何?还有其他与此相关的问题我应该知道吗?维基百科有(未引用,自然)声明:
“AltiVec 操作,尽管是 128 位,但被视为 64 位。这允许与在 AltiVec 之前设计的小端主板兼容。”
这让我觉得在 little-endian 模式下可能还有其他特定于 AltiVec 的讨厌。
c - htons中的混乱-小端/大端
当我通过套接字从一个进程向另一个进程发送一个整数变量,然后在接收端打印该值时,不使用ntohl/htonl,该值仍然相同,那么除了初始化套接字结构之外,我还需要在哪里使用这些函数。我理解小/大端。但是为什么我们需要在值保持不变的情况下将端口和 IP 号转换为主机/网络字节顺序。请详细解释整数是如何通过网络传输的?
c - 如何将浮点数转换为无符号变量?
有人可以帮我处理浮点变量的字节顺序吗?实际上,代码在 Solaris 上可以正常工作,但在 Windows Xp 上却不行。这是我的代码的一个示例: ....
...
代码在 Unix 上用 gcc 编译,在 wndows 上用 MSVC++6 编译。您的任何帮助将不胜感激,如果您能指导我访问任何提供有关字节序的有用信息的链接或文档,我将很高兴...
提前感谢您的帮助,mk
c++ - 在 windows 和 solaris 之间以二进制格式交换数据的可能方法是什么?
有人可以帮忙告诉我是否有任何可能的方法通过互联网套接字在 Windows 上运行的程序和 Unix 上运行的其他程序之间传递数据结构(即二进制格式)?
任何想法或链接到处理它的材料将不胜感激。提前感谢您的帮助,Mk
unix - Unix hexdump 中的字节顺序
以下 *nix 命令将 IP 和端口 (127.0.0.1:80) 的十六进制表示形式通过管道传输到 hexdump 命令。
-e 标志允许任意格式解析输入。在这种情况下,我们将 IP 的前三个八位字节解析为无符号十进制数,后跟一个点。最后的八位字节也被解析为无符号十进制,但后面跟着一个冒号。最后——这就是问题所在——端口的 2 个字节被解析为一个无符号十进制数,后跟一个换行符。
根据执行此命令的系统的字节顺序,结果会有所不同。大端系统将正确显示端口 80;而小端系统将显示端口 20480。
有什么方法可以操作 hexdump 以了解字节顺序,同时仍然允许通过 -e 进行任意格式规范?
c - 如何读取二进制文件并将输出显示为 C 中的浮点数?
我正在尝试读取存储在二进制文件中的 4 字节数字,但我似乎没有得到正确的输出。这是我的代码:
我的输出是 v = -961576900.0000000,但它应该是 v = 3.14159。关于我的问题出在哪里的任何想法?
注意。input.dat 是二进制文件:11010000 00001111 01001001 01000000
谢谢
macos - 在运行时检查 MAC 上 C 程序的 CPU 类型
C 程序如何在 RUN 时(不是编译时)确定它是在 Little-Endian 还是 Big-Endian CPU 上运行?
它必须是“运行时”检查而不是“编译时”的原因是因为我正在使用带有 Intel-CPU 的 MAC 以 MAC OSX 的通用二进制格式构建程序。该程序预计可在 Intel 和 Power-PC CPU 上运行。即,通过MAC上的通用二进制格式,我想使用Intel-CPU构建一个程序并在PPC CPU下运行它。
我的程序中需要 CPU 检查的逻辑是 64 位整数的主机到网络字节顺序更改函数。现在我让它盲目地交换字节顺序,这在 Intel-CPU 上工作正常,但在 PPC 上中断。这是C函数:
以跨平台方式执行此操作的任何更好方法?
谢谢
c++ - 整数中的每个字节如何存储在 CPU / 内存中?
我试过这个
输出就像:
89
0
0
0
这很好地训练了我的胃,因为我认为这个数字会像 0x00000059 这样保存在内存中,那么 c[0] 怎么会是 89 呢?我认为它应该在 c[3] 中...
endianness - 有符号整数的字节序转换
我正在通过 UDP 接收大端数据并将其转换为小端。消息来源说整数是有符号的,但是当我交换有符号整数的字节(特别是 16 位)时,我得到了不切实际的值。当我将它们交换为无符号整数时,我得到了我的期望。我想源文档可能不正确,实际上是在发送无符号的 16 位整数。但是这有什么关系呢?这些值都应该是正数并且远低于 16 位 INT_MAX,因此溢出应该不是问题。我唯一能想到的是(1)文档是错误的并且(2)我在执行有符号字节序交换时没有正确处理符号位。
我真的有两个问题:
1)当溢出不是问题时,我读入有符号或无符号整数是否重要。
2) 有符号值和无符号值之间的字节序交换是否不同(即符号位是否需要以不同方式处理)?
我认为有符号和无符号值的字节序转换看起来相同,例如 16-bit value = value&0xff00 >> 8 | value&0x00ff << 8
。
谢谢