我正嘗試將原始二進制位一次寫入文件。將原始二進制文件寫入C中文件
我已經發現,使用無符號字符的示例 - >https://stackoverflow.com/a/2666669/1541965
但最小大小爲8位(因爲無符號字符0至255的)。
有沒有辦法以更直接的方式將位寫入文件?
謝謝。
我正嘗試將原始二進制位一次寫入文件。將原始二進制文件寫入C中文件
我已經發現,使用無符號字符的示例 - >https://stackoverflow.com/a/2666669/1541965
但最小大小爲8位(因爲無符號字符0至255的)。
有沒有辦法以更直接的方式將位寫入文件?
謝謝。
你還沒有說過你正在使用什麼操作系統。但一般來說,寫入文件的最小單位是一個8位字節。如果你想寫個人位,你需要在你自己的代碼中將它們組裝成字節。我不知道有哪些操作系統的文件IO設施允許寫入各個位。
不,沒有,至少不是直接的。 C的二進制文件I/O模型是它們是字節序列(通常是8位)。
您可以在自己的代碼中編寫一個函數,該函數需要一個1位的值並將這些位收集到一個字節中,並在接收到8位時將它們寫入文件。如果字節值尚未歸檔,您還需要在最後進行額外的寫操作。
不可能寫出部分字節;如有必要,你可以用零填充最後一個字節。
(C標準需要一個字節是至少 8位,但它允許它要多。由CHAR_BIT
指定位的一個字節的數字,在<limits.h>
定義。CHAR_BIT
將是準確8在您可能遇到的任何系統上。)
計算機體系結構不允許您分割字節,即8位。個人電腦工作在8位。圖靈的巨像工作了5位(因爲在Baudot的代碼中,數字2^5就足夠了)。
微處理器沒有處理小於一個字節的單位的指令(甚至比特操作像或在1,2,4,8位上使用)。
RAM和磁盤甚至不能*存儲*個別位。任何非深奧計算機上的最小可尋址單元都是一個8位字節。 – Wyzard 2012-07-21 00:15:09
現代RAM硬件中的* real *最小可尋址單元是64位;對於光盤,通常是512或4096字節。只是發生在CPU方便地讓你假裝RAM可以按字節訪問,並且操作系統讓你假裝可以按字節訪問光盤。所以RAM和光盤不能存儲單獨的位而不能存儲單個字節的情況並非如此。 :-) – 2012-07-21 00:26:16