2016-05-17 10 views
-1

Ich bin sicher, dass ich Zahlen von 0-7 bekomme, und ich bin daran interessiert, den Code so effizient wie möglich zu machen. Ich möchte nur die drei am wenigsten signifikanten Bits in die Binärdatei und nicht das ganze Byte eingeben. Kann ich sowieso nur 3 Bits schreiben? Ich bekomme eine große Anzahl von Zahlen ... Der andere Weg, den ich gefunden habe, ist zu versuchen, die Zahlen (00000001 shl 3 & nächste Nummer) Obwohl es immer eine ungerade raus ist.Effiziente Dateispeicherung in C, Schreiben bestimmter Bits in eine Binärdatei

Antwort

3

Dateien arbeiten auf Byte-Ebene, es gibt keine Möglichkeit, einzelne Bits auszugeben . Sie müssen die ursprünglichen Bytes lesen, die die interessierenden Bits enthalten, sie mit den Bits, die Sie ändern müssen (mit bitweisen Operationen), korrigieren und sie dort zurückschreiben, wo sie waren.


1. Und es wäre nicht effizient sein, so auf jeden Fall zu tun. Festplatten funktionieren am besten mit großen Blöcken zum Schreiben; Flash-Festplatten tatsächlich erfordern mit großen Blöcken arbeiten (=> ein einzelnes Bit Änderung erfordert eine vollständige Block löschen und neu schreiben); Dies sind einige Gründe, warum Betriebssysteme und Festplattencontroller viel Schreibcaching durchführen.

+0

Ich versuche nicht, auf dem 3. Bit genau zu sein, aber zum Beispiel ein Array von 3 Ints, die insgesamt zu 24 Bits geschrieben werden können, nur 16 Bits (3x3 + Polsterung) die Idee ist, Speicher –

+2

@ Dreggman45 : Sie können 10 3-Bit-Gruppen in einem einzigen 32-Bit-Int stopfen - spart Platz, aber alle Zugriffe (Lesen und Schreiben) auf die Daten erfordern jetzt Verschiebungen und Masken. Stellen Sie sicher, dass Sie tatsächlich diesen Platzbedarf benötigen und dass die damit verbundenen Kosten in Ordnung sind. (Auch die Verwendung von 4bit-Gruppen würde Ihren Code viel einfacher machen.) – Mat