Wie liest genau ein byte einer Binärdatei in C++
Ich versuche, ein Lesen eines Bytes aus einer binären Datei und erhalte ich ungenaue Ergebnisse.
Dies ist der Inhalt der binary-Datei:
00000000 00 04 0A 07 00 00 00 00 00 00 74 00 00 00 00 61 69 6E 62 6F 77 00 ..........t....ainbow.
Der Punkt ist, dass ich Lesen kann, mehr als ein byte, aber ich kann einfach nicht Lesen, genau ein byte. Wenn versucht, Lesen Sie das Dritte byte 0A
die gleich 10
, sondern es gibt mir einen Wert von 32522
oder in hexadezimaler 7F0A
. Was vermisse ich hier?
#include <iostream>
#include <fstream>
#include <cstring>
#include <fstream>
using namespace std;
int main()
{
fstream file("foo.daf", ios::in | ios::out | ios::binary);
file.seekg(2);
int x;
file.read(reinterpret_cast<char *>(&x), 1);
cout<<x<<endl;
return 0;
}
- Es scheint, wie Sie gehen über es der falsche Weg.
unsigned char x; file >> x;
char c; if(file.get(c)) { /* read was successful, use c */ }
- Ich bezweifle, dass eine formatierte input-Funktion werden die gewünschten Ergebnisse zu erreichen. Im Fall von diesem speziellen Charakter, es wird definitiv nicht.
- dies scheint zu sein, eine C++ Frage, also warum ist es markiert auch C?
Du musst angemeldet sein, um einen Kommentar abzugeben.
x
ist nicht initialisiert, und ändern Sie Sie nur ein byte, also haben Sie Müll, für die anderen bytes.Verwenden Sie direkt den richtigen Typ sollte sich eine Lösung für Ihr Problem (und um nicht aus einem Guss).
'\r'
in deinem Fall) nicht auf die Reihe, Sie haben zu werfen es in einen integer um zu sehen, seinen Wert.Dem folgenden code ist das, was du suchst:
Er liest ein Zeichen und wandelt Sie dann in eine Ganzzahl.
Das problem ist, dass Sie beim Lesen einer int. Ein Int ist mehr als ein byte auf fast alle Systeme. Int ist meist 4 bytes, und manchmal auch 8 bytes. Sie wirklich wollen, zu Lesen in einem char wie der Vorherige Kommentar sagt.
file.read(reinterpret_cast<char *>(&x), 1);
<- so liest einechar
(das geschieht, um überschneidungen eineint
für schlechte Gründe), nicht einint
.char
gleichbyte
nach C++ - Spezifikation, aber Spezifikation istbyte
nicht 100% meine 8bits
. Also, wenn Sie wollen, Lesen 8-bit-bytes, müssen Sie verwenden Feste Größe im 8-bit-Typ und packchars
zu. Was ist =(int8_t
unterstützt werden können Systeme, die 16-bit -char
obwohl.