c - C 二进制文件的位字节顺序和可移植性

标签 c file endianness

在 C 中,我有一个 char 数组,用于存储位级别的数据。我将这些数组存储到文件中,然后在具有不同体系结构的机器中读取它们。我的问题是位的顺序是否能保证一致?例如,如果我将“10010011”存储到第一个字节,相邻的 1 是否总是被读取为位于 2^0 和 2^1 位置,或者它们最终会被解释为 2^7 和 2^6 位?

编辑:我想为稍后阅读此页面的人澄清一下这个问题。字节顺序是多字节对象中字节的顺序,但我关心的是给定字节中的位。当一个字节存储到磁盘时,它存储为(通常)8 位的序列。我不是硬件专家,但它必须以某种方式归结为那个。所以,我担心的是字节的存储方式是不是任何机器都会读取原始的 unsigned char 值,或者如果一台机器是 3,那么另一台机器是 192。我担心这些位最终会以某种方式被洗牌。显然,根据我选择的答案以及下面的评论之一,这不是问题。谢谢。

最佳答案

简单的答案:

这些位仍然是正确的顺序。

但是,如果执行超过 %c 的任何格式转换,例如 %d,那么读取架构的字节顺序将决定字节顺序。每个字节中的位仍然相同。

关于c - C 二进制文件的位字节顺序和可移植性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28004830/

相关文章:

python - 如何从 Python 中的任意换行符开始从文件中读取行

node.js - 通过 Node 浏览器到 S3 文件传输

c - 动态分配的二维矩阵的段错误

file - 非 ANSI 文件的 TStringList 行为

c - 为什么平均输出是inf?

c - 在编译时确定字节顺序

java - 将 2 个整数值组成一个 long

ios - 将 GUID 转换为 NSString - Objective C

c - C中的二进制数输出

c - 省略 printf 会导致错误答案