【问题标题】:How to write single bits to a file in C如何在C中将单个位写入文件
【发布时间】:2015-02-19 18:30:54
【问题描述】:

我正在编写熵编码算法,我想将单个位(如编码字符)写入文件。例如,我想将 011 写入文件,但如果将其存储为字符,它将占用 3 字节而不是 3 位。所以我的最后一个问题是:如何将单个位写入文件?

提前致谢!

【问题讨论】:

  • 你不能。您必须至少写入一个字节。
  • 澄清一下,我认为 OP 错误地指出一个字符需要 3 个字节,但它只占用一个字节,因此答案指定需要使用一个字节。

标签: c encoding decoding entropy


【解决方案1】:

您不能将单个位写入文件,分辨率是单个字节。

如果要按顺序写入位,则必须将它们批量化,直到有一个完整的字节,然后再写入。伪代码(虽然类似于 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

如果您想更改单个位,您必须读取一个字节,使用bitwise operations 对其进行操作,然后将其写回。

【讨论】:

  • 明确地说,这是 C 语言的限制,而不是操作系统问题?例如,C 中最小的数据类型是一个单字节的 char,因此您不能只修改 C 中的一个位。但是,从操作系统级别来看,即使您的语言不是这样允许你写一个位,操作系统将不得不将整个内存页面写回磁盘,因为现代操作系统中的分页方式?
猜你喜欢
  • 1970-01-01
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多