Kann jemand das folgende Verhalten zu einem relativen Neuling erklärt ...Lese Bytes direkt aus dem RAM C++
const char cInputFilenameAndPath[] = "W:\\testerfile.bin";
int filesize = 4584;
char * fileinrampointer;
fileinrampointer = (char*) malloc(filesize);
ifstream fsInputFileStream;
fsInputFileStream.open(cInputFilenameAndPath, fstream::in | fstream::binary);
fsInputFileStream.read((char *)(fileinrampointer), filesize);
for(int f=0; f<4; f++)
{
printf("%x\n", *fileinrampointer);
fileinrampointer++;
}
ich den obigen Code erwartet den ersten 4 Bytes der Datei rread ich in Erinnerung habe gerade gelesen. In der Schleife zeige ich nur das aktuelle Byte an, auf das der Zeiger zeigt, inkrementiere dann den Zeiger, der bereit ist, das nächste Byte anzuzeigen. Wenn ich den Code ausführen, erhalte ich:
ffffff94
ffffffd2
Die Werte sind korrekt, aber jeder andere Wert scheint auf eine 64 Bit aufgefüllt werden Nummer. Da ich ihn auffordere, den Wert anzuzeigen, der durch einen 'char size'-Zeiger angezeigt wird, erwartete ich Zeichengrößenergebnisse, aber jedes zweite Ergebnis wird als sehr lang ausgegeben. Wenn ich * fileinampointer zu einem vorzeichenlosen __int8 anmelde, hinterlässt es mich mit dem Wert, den ich will (ohne die führenden 1s), der das Problem löst, aber ich frage mich nur, ob irgendjemand erklären kann, was oben passiert?
Warum mit einem printf die Mühe machen? Mit cout << * fileinrampointer << endl; Sie verwenden die C++ - Methode für die Ausgabe an den Bildschirm. – Burkhard
Woher bekommen Sie 64 Bits? Ich sehe nur 32 Bits. –