0

我正在尝试一次将原始二进制位写入文件。

我找到了一个使用 unsigned char 的示例-> https://stackoverflow.com/a/2666669/1541965

但是最小大小是 8 位(因为 unsigned char 0 到 255)。

有没有办法以更直接的方式将位写入文件?

谢谢。

4

3 回答 3

3

你还没有说你使用的是什么操作系统。但通常您写入文件的最小单位是一个 8 位字节。如果您想写入单个位,则需要在您自己的代码中将它们组装成字节。我不知道任何操作系统的文件 IO 设施允许写入单个位。

于 2012-07-21T00:13:36.313 回答
0

不,没有,至少不是直接的。C 对二进制文件的 I/O 模型是它们是字节序列(通常为 8 位)。

您可以做的是,在您自己的代码中,编写一个函数,该函数采用 1 位值并将这些位收集到一个字节中,并在收到 8 位时将它们写入文件。如果尚未归档字节值,您还需要在最后进行额外的写入。

不能写入部分字节;如有必要,您可以在最后一个字节中填充零。

(C 标准要求一个字节至少为8 位,但它允许它更多。一个字节中的位数CHAR_BIT由遇到。)<limits.h>CHAR_BIT

于 2012-07-21T00:16:51.103 回答
0

计算机体系结构不允许您拆分字节,即 8 位。PC 在 8 位上工作。图灵的 Colossus 在 5 位上工作(因为在 Baudot 的代码中,数字 2^5 就足够了)。

微处理器没有指令来处理小于一个字节的单位(偶数位操作,如或,在 1、2、4、8 位上使用)。

于 2012-07-21T00:19:47.997 回答