2012-04-07 69 views
2

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

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

产生的文件将在长度至少为1个字节,磁盘(根据文件系统) – 2012-04-07 19:44:48

回答

3

不能存储在一个文件中只有1位。几乎所有的现代文件系统和硬件都将数据存储在8位,也就是字节或八位组中。

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

+0

我们是否知道为什么文件系统认为以字节为单位,而不是位上分配多了Ks? – 2012-04-07 19:47:06

+0

我认为这是因为将几个位组合在一起意味着一个值比分别处理它们更容易。例如,01000001可以表示字母'A'。不仅是文件系统,而且几乎计算机内的所有内容都以字节为单位进行工作这比使用单个位更简单。 – 2012-04-07 19:52:07

8

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

另外,从Wikipedia

在历史上,字节是用于编码单个文本 字符在计算机的比特的数量和用于这个原因,它是在许多计算机架构的 基本寻址元件。

0

如果你只写位,您可在8位混合成一个字节。 但是不可能写一个单独的位。

0

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

+0

我使用一些数据创建二进制文件,并且因为我想在每条记录中只写入1或0之前写入一些32位数据和64位数据。因为当您要读取文件时,0或1会指示,你应该读64或32位的值。希望我解释得很好... 编辑:我需要尽可能最小的数据来做到这一点。这就是为什么我要求写单个位。 – Hlavson 2012-04-08 09:07:40