如何在C语言中向文件写入单个位

3

我正在编写一个熵编码算法,希望将单个位以编码字符的形式写入文件。例如,我想要将011写入文件,但如果您将其存储为字符,则需要占用3个字节而不是3个位。那么我的最终问题是:如何将单个位写入文件?

提前感谢!


你不能这样做。你必须至少写一个字节。 - Andrew Barber
澄清一下,我认为 OP 误述了一个字符需要 3 个字节,但实际上只需要一个字节,因此答案指定需要使用单个字节。 - wxz
1个回答

7

你不能将单独的位写入文件,分辨率是一个字节。

如果您想按顺序写入位,请将它们批量处理直到拥有一个完整的字节,然后再写入。伪代码(类似于C)如下:

currbyte = 0
bitcount = 0
def writeBit (bit):
    currbyte = currbyte << 1 | bit
    bitcount++
    if bitcount == BITS_PER_BYTE:
        write currbyte to file
        currbyte = 0
        bitcount = 0

如果您想要更改单个位元,您需要读入一个字节,使用位运算来操作它,然后将其写回。


请明确一点,这是 C 语言的限制,而不是操作系统问题?也就是说,在 C 语言中,最小的数据类型是 char,它是一个字节,因此无法仅修改单个位。然而,从操作系统层面来看,即使您的编程语言允许您写入单个位,由于现代操作系统中分页的工作方式,操作系统仍需要将整个页面的内存写回磁盘。 - wxz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接