【问题标题】:Write one single bit to binary file using BinaryWriter使用 BinaryWriter 将一位写入二进制文件
【发布时间】:2012-04-20 21:55:18
【问题描述】:

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

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) 时,文件只有一个字节,但我想写一个位。这可能吗?

【问题讨论】:

  • 生成的文件长度至少为 1 字节,并在磁盘上分配许多 Ks(取决于文件系统)

标签: c# byte bit writer binarywriter


【解决方案1】:

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

同样来自Wikipedia

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我们知道为什么文件系统以字节而不是位来思考吗?
    • 我认为这是因为将几个位组合在一起表示一个值比单独处理它们更容易。例如,01000001 可以表示字母“A”。不仅文件系统,而且计算机内部的几乎所有东西都以字节为单位。这比使用单个位更容易。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 我正在用一些数据创建二进制文件,因为有一些 32 位数据和 64 位数据我想在每条记录之前只写 1 或 0。因为当你想读取文件时, 0 或 1 表示您应该读取 64 位或 32 位值。希望我解释得很好......编辑:我需要尽可能少的数据来做到这一点。这就是为什么我要求写一个位。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      相关资源
      最近更新 更多