一度に未加工のバイナリ ビットをファイルに書き込もうとしています。
unsigned char を使用する例を見つけました -> https://stackoverflow.com/a/2666669/1541965
ただし、最小サイズは 8 ビットです (unsigned char 0 ~ 255 のため)。
より直接的な方法でファイルにビットを書き込む方法はありますか?
ありがとう。
一度に未加工のバイナリ ビットをファイルに書き込もうとしています。
unsigned char を使用する例を見つけました -> https://stackoverflow.com/a/2666669/1541965
ただし、最小サイズは 8 ビットです (unsigned char 0 ~ 255 のため)。
より直接的な方法でファイルにビットを書き込む方法はありますか?
ありがとう。
使用しているオペレーティング システムについては言及していません。ただし、通常、ファイルに書き込む最小単位は 1 つの 8 ビット バイトです。個々のビットを書きたい場合は、独自のコードでそれらをバイトにアセンブルする必要があります。ファイル IO 機能が個々のビットの書き込みを許可する OS を私は知りません。
いいえ、少なくとも直接ではありません。バイナリ ファイルに対する C の I/O モデルでは、バイナリ ファイルは一連のバイト (通常は 8 ビット) です。
あなたができることは、あなた自身のコードで、1ビットの値を取り、ビットをバイトに集め、8ビットを受け取ったときにそれらをファイルに書き込む関数を書くことです。バイト値がまだファイルされていない場合は、最後に追加の書き込みを行う必要もあります。
部分的なバイトを書き込むことはできません。必要に応じて、最後のバイトにゼロを埋め込むことができます。
(C 標準では、1 バイトは少なくとも8 ビットである必要がありますが、それ以上にすることも許可されています。1 バイトのビット数は で指定されCHAR_BIT
、 で定義されています<limits.h>
。CHAR_BIT
出会い。)
コンピュータ アーキテクチャでは、8 ビットであるバイトを分割することはできません。PC は 8 ビットで動作します。Turing の Colossus は 5 ビットで動作しました (Baudot のコードでは 2^5 で十分だからです)。
マイクロプロセッサには、1 バイト未満の単位を処理するための命令がありません (または、1、2、4、8 ビットで使用するようなビット操作でも)。