使用 BinaryWriter 将一个位写入二进制文件

本文关键字:一个 二进制文件 BinaryWriter 使用 | 更新日期: 2023-09-27 18:30:16

我想将一个位写入二进制文件。

using (FileStream fileStream = new FileStream(@"myfile.bin", FileMode.Create))
using (BinaryWriter binaryWriter = new BinaryWriter(fileStream))
{
    binaryWriter.Write((bool)10);
}

类似binaryWriter.Write((bit)1);
当我使用binaryWriter.Write((bool)1)文件有一个字节时,但我想写入一个位。这可能吗?

使用 BinaryWriter 将一个位写入二进制文件

不,不可能写一个位。您必须至少写入一个完整的字节。如果您处于写入单个位的情况,您可以等到准备好写入 8 位(即将它们排在内存中),然后写出一个完整的字节(即使用位移等将这些位组合成一个字节)。

同样来自维基百科:

从历史上看,一个字节是用于编码单个的位数 计算机中文本的字符,因此它是 许多计算机体系结构中的基本可寻址元素。

不能在文件中仅存储 1 位。几乎所有现代文件系统和硬件都以 8 位段(即字节或八位字节)存储数据。

如果要在文件中存储位值,请将 1 或 0 存储为字节(00000001 或 00000000)。

如果您只写入位,则可以将 8 位混合到一个字节中。但是不可能写一个位。

您可以通过读取/修改/写入来做到这一点。 你为什么要做这样的事情? 不管是什么,找到另一种方法,将位打包成字节,读/写布尔字节并将它们转换回位,使用 ASCII '0' 和 '1' - 除了一次读写一位之外,几乎任何东西。