【问题标题】:write raw binary to file in C在C中将原始二进制文件写入文件
【发布时间】:2012-07-21 00:10:30
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

    标签: c binary


    【解决方案1】:

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

    【讨论】:

    • RAM 和磁盘甚至不能存储 个位。任何非深奥计算机上的最小可寻址单元都是 8 位字节。
    • 现代RAM硬件中真正的最小可寻址单元是64位;对于光盘,它通常是 512 或 4096 字节。碰巧的是,CPU 可以方便地让您假装 RAM 可以按字节访问,而操作系统可以让您假装磁盘可以按字节访问。因此,RAM 和磁盘不能存储单个位,而不是它们不能存储单个字节,这并不是真的。 :-)
    【解决方案2】:

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

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

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

    (C标准要求一个字节至少 8位,但它允许更多。一个字节中的位数由CHAR_BIT指定,在@987654322中定义@.CHAR_BIT 在您可能遇到的任何系统上都将恰好是 8。)

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-18
        相关资源
        最近更新 更多