2012-04-07 79 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