- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我对系统/cpu/程序的字节顺序感到困惑。
所以我必须问一些问题让我的思路清晰。
如果我只在我的 C++ 程序中使用 char
类型:
void main()
{
char c = 'A';
char* s = "XYZ";
}
然后将此程序编译成一个名为a.out
的可执行二进制文件。a.out
可以在 little-endian 和 big-endian 系统上运行吗?
如果我的 Windows XP 系统是 little-endian,我可以在 VMWare/VirtualBox 中安装 big-endian Linux 系统吗?什么使系统小端或大端?
如果我想写一个字节顺序无关的 C++ 程序,我需要考虑什么?
最佳答案
Can a.out both run on little-endian and big-endian system?
不,因为几乎任何两个具有不同字节序的 CPU 都不会运行相同的指令集。 C++ 不是 Java;你不会编译成可以编译或解释的东西。您编译为特定 CPU 的程序集。字节序是 CPU 的一部分。
但这不属于字节序问题。您可以为不同的 CPU 编译该程序,这些可执行文件将在各自的 CPU 上正常工作。
What makes a system little-endian or big-endian?
就 C 或 C++ 而言,CPU。计算机中不同的处理单元实际上可以有不同的字节序(GPU 可能是大字节序,而 CPU 是小字节序),但这有点不常见。
If I want to write a byte-order independent C++ program, what do I need to take into account?
只要按照 C 或 C++ 的规则玩,就不必关心字节序问题。
当然,您也无法将文件直接加载到 POD 结构中。或者读取一系列字节,假装它是一系列无符号短裤,然后将其处理为 UTF-16 编码的字符串。所有这些都进入了实现定义的行为领域。
“未定义”和“实现定义”的行为是有区别的。当 C 和 C++ 规范说某些东西是“未定义的”时,它基本上意味着可能会发生各种破坏。如果您继续这样做(并且您的程序不会崩溃),您可能会得到不一致的结果。当它说某事由实现定义时,您将获得一致的结果该实现。
如果你在 VC2010 中为 x86 编译,当你假设一个字节数组是一个无符号短数组时会发生什么(即:unsigned char *byteArray = ...; unsigned short *usArray = (unsigned short*)byteArray
) 由实现定义。为大端 CPU 编译时,您会得到与为小端 CPU 编译时不同的答案。
一般来说,字节序问题是您可以本地化到输入/输出系统的问题。网络、文件读取等。应该在代码库的末端处理它们。
关于c++ - 什么使系统小端或大端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9237317/
我正在尝试在 Raspberry Pi(使用 C 编程)和 Arduino(使用 Arduino IDE)之间发送和接收数据。 根据我在互联网上可以找到的内容,它指出两者都是小端格式。 我在 teun
考虑这段代码: int a=0x10000001; char b; b=(char)a; printf("%#x \n",b); 在我的 PC 上它打印 0x01,我并不感到惊讶。它在 BIG END
我需要你的帮助。我想使用以下代码,因为我正在开发一个音频工具(仅适用于 .wav 文件),其主要功能是显示信号波形。大端和小端是我无法控制的元素。我认为以下代码解决问题的方式是正确的:- 如果音频文件
我有一个十六进制字符串,其内容为18000000,该字符串采用主机字节顺序(小端),我需要将其转换为网络字节顺序(大端)。生成的十六进制字符串将为 00000018。 总而言之,我需要转换180000
我有一个十六进制字符串,其内容为18000000,该字符串采用主机字节顺序(小端),我需要将其转换为网络字节顺序(大端)。生成的十六进制字符串将为 00000018。 总而言之,我需要转换180000
我有一个整数列表,比如说 L,它包含一个数字的二进制表示。列表L中的每个整数可以是0或1。“最低有效位”在左边(不是在右边)。 示例:1000001111 代表(十进制)数字 961,或 011101
我有来自实验的Base64 编码数据。所以我想逐步做的是: 从 base64 编码中检索字节(解码) 将字节转换为小端 从 (zlib) 中解压字节 字节数组转 float 组 示例: Dn3LQ3n
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
解码字节时,binary.Read()要求您指定该操作的预期字节顺序。 binary.Read() 还允许您传入结构,但据我所知,它使用相同的字节顺序将字节流解码到结构中的每个字段中。 当编码整数的字
我将 24 位单声道音频 .wav 文件读入 > 7) * 255 data = a.view('
我正在解码一个二进制文件,它有用四个字节表示的十进制数字,小端。例如,94 53 F0 40代表 7.510202。不幸的是,Python 给了我 7.51020240784。 当我尝试使用 unpa
这种传输语法中的数据是如何组织的?来自标准的描述: This Transfer Syntax applies to the encoding of the entire DICOM Data Set.
我是一名优秀的程序员,十分优秀!