Problem, Binärdaten auszulesen
-
Ich habe ein Binärdatei mit einer langen Liste verschiedener Daten, die ich auch schön auslesen kann. Allerdings sind die Werte, die ich bekomme, größtenteils Blödsinn.
Ich lese die Datei in etwa so aus:
// Datei öffnen ifstream infile; infile.open ("test.datei", ios::in|ios::binary); // Variablen deklarieren char buf4[4]; // 4-Byte-Buffer unsigned long nSamples; // Daten einlesen infile.read(buf4,4); nSamples = (unsigned long) *buf4; // --> weitere Verarbeitung von nSamples // Datei schließen infile.close();Statt der zu erwartenden Zahl steht in nSamples jetzt aber eine nutzlose/falsche Zahl (mal wenig, mal viel, nie richtig). Nullen werden aber richtig erkannt und es lässt sich feststellen, dass ich durchaus die richtigen Werte einlese, sie aber offensichtlich nicht richtig in unsigned long umwandle. In der Datei sind sie laut Dokumentation als unsigned long gespeichert.
Vielen Dank schon einmal.
-
Ich würde mal vermuten, du hast den Cast falsch angesetzt (statt den gesamten Puffer als int-Wert zu betrachten, wandelst du nur das erste Zeichen um). Versuch's mal so:
nSamples = *((unsigned long*)buf); // oder besser - mit C++ Casts: nSamples = * reinterpret_cast<unsigned long*>(buf); // oder du lässt den Zwischenspeicher gleich ganz weg: infile.read(reinterpret_cast<char*>(&nSamples),sizeof(long));
-
Das scheint das Problem zu großen Teilen zu lösen, danke!
Ich werde allerdings noch genug Zeit damit verbringen müssen, die Werte zu interpretieren da sie sich leider ganz und gar nicht so verhalten, wie ich das dachte