2016-05-17 10 views
-1

0-7の数値が得られることが保証されているので、コードをできるだけ効率的にすることに興味があります。 バイト全体ではなく、3つの最下位ビットだけをバイナリファイルに入力したいとします。 3ビットしか書き込めませんか?私は数字の膨大な数を取得します... 私が見つけた他の方法は、数字をマッシュアップしようとすることです(00000001 shl 3 &次の番号) いつも奇妙なものがあります。効率的なファイル保存Cでバイナリファイルに特定のビットを書き込む

答えて

3

ファイルはバイト単位で動作しますが、単一ビットを出力する方法はありません。関心のあるビットが入っている元のバイトを読み取って、ビット単位の操作を使って修正しなければならないビットで修正し、元のバイト位置に書き戻す必要があります。


1.そしてとにかくそうすることが効率的ではないでしょう。ハードディスクは大きなチャンクで書き込みが最適です。フラッシュディスクは実際にはで、大きなブロックで作業するにはが必要です(=> 1つのビットを変更するには完全なブロック消去と書き換えが必要です)。オペレーティングシステムとディスクコントローラが多くの書き込みキャッシュを行う理由はいくつかあります。

+0

私は3ビット目で正確にしようとしているわけではありませんが、たとえば、合計24ビットの16ビット(3x3 +パディング)に書き込むことができる3 intの配列は、メモリを節約するというアイデアです。 –

+2

@ Dreggman45 :あなたは1つの32ビットintに10の3ビットグループを詰め込むことができます - スペースを節約しますが、データへのすべてのアクセス(読み書き)は現在、シフトとマスクが必要です。あなたが実際にスペース節約の量を必要としていることを確認し、関連する費用はOKです。 (また、4ビットグループを使用するとコードがかなり単純になります)。 – Mat

関連する問題