Bits in Textdokument schreiben
-
Hey,
das problem ist folgendes, ich will ein Bit ein ein Textdokument schreiben.
Ich habe es schon mit "bitset.h" versucht, das funktioniert auch nicht. Selbst wenn man File<<true oder false schreibt(ja ich weis wirklich kaum noch weiter), kommen Bytes raus.
Egal, was ich bisher versucht habe, es kommen überall Bytes statt bits.Ist das überhaupt in C++ möglich ?
Ein Link oder irgendwas der gleichen würde mir auch schon reichen, aber ich hatte bei der google suche keinen richtigen erfolg.mfG
-
Erklär mal, welches Ergebnis du dir genau vorstellst. Bisher klingt das eher so, als wüsstest du nicht, was Bit, Byte oder Datei bedeuten.
-
Gast1000 schrieb:
Ist das überhaupt in C++ möglich ?
Nein, und auch in keiner anderen Sprache.
Files sind aus Bytes aufgebaut, einzelne Bits kann man nicht schreiben.Was man machen kann, ist einzelne Bits zu sammeln und wenn man ein Byte voll hat dieses dann schreiben.
-
SeppJ schrieb:
Erklär mal, welches Ergebnis du dir genau vorstellst. Bisher klingt das eher so, als wüsstest du nicht, was Bit, Byte oder Datei bedeuten.
Vielleicht meint er das...
std::ofstream stream("Datei.txt"); int a(28); stream << a & (1 << 2);//Drittes Bit "schreiben"
-
Hast du in C++ schon mal ein Bit allokiert? Also ich nicht und das ist auch nicht möglich. Die Darstellung von "bool" ist auch 32bit.
Check this out (ungetestet):
#include <iostream> using namespace std; int main() { cout << "sizeof(bool) = " << sizeof(bool) << " Bytes" << endl; return 0; }Du kannst nur Bytes speichern, aber kannst natürlich auf Bits zugreifen und diese Manipulieren. Dazu musst du Dir sog. Masken bauen und mit den Bitoperatoren rumfummeln.
Hast du Dir gedacht: "so zum Anfang, bevor ich Bytes schreibe, schreibe ich erstmal ein Bit zur Übung"

gruß Philipp
-
nein, das problem ist, ich habe 26000 nullen und einsen in einem Dokument. Jedoch würde die übertragung in Bits deutlich schneller gehen, als die übertragung in bytes.
Das gewünschte ergebnis wäre das die datei 26000 Bit statt Byte groß ist. Was halt die übertragungszeit deutlich verringern würde.
@hustbaer: meinst du, einfach das spezielle ACSII zeichen rein zu schreiben, welches die Bitfolge enthält ?
-
Okay ich glaub ich habe gecheckt, was du willst!
Du willst 26000 '0' und '1'er chars komprimieren in Bits, sodass du pro Byte 8 Bits unterbringst, also nur 3250 Bytes brauchst.Versuch das ungefähr so (ungetestet):
// liest die nächsten "size" Bytes ein und gibt komprimiertes Byte aus char bitpacker(const char *bits, int size=8) { char b = 0; for(int i = 0; i < size; ++i) { switch(bits[i]) { case '0': break; case '1': b|=1; break; default: // wrong char ? } b <<= 1; } return b; }Lies die Datei einfach nach und nach ein und pass auf, falls weniger als 8 Bytes gelesen wurden, dass du das für "size" übergibst.
gruß Philipp