Ich habe ich Datei möchte ich in C++ lesen. Das erste, was ich lesen und überprüfen muss, ist die magische Nummer der Datei. In meinem Fall ist es der Hex-Wert: 0xABCDEF00C++ lesen und vergleichen magische Zahl aus Datei
ich die Nummer auf diese Weise lesen und vergleichen:
ifstream input ("C:/Desktop/myfile", ios::binary);
if (input.is_open()) {
input.seekg(0, ios::beg);
unsigned char magic[4] = {0};
input.read((char*)magic, sizeof(magic));
if(magic[0] == 0xAB &&
magic[1] == 0xCD &&
magic[2] == 0xEF &&
magic[3] == 0x00) {
cout << "It's my File!" << endl;
} else {
cout << "Unknown File!" << endl;
}
}
Das funktioniert sehr gut, aber gibt es eine Möglichkeit, die gesamte Lese char [] zu vergleichen - Array sofort? Wie auf diese Weise:
unsigned int magicNumber = 0xABCDEF00;
... same code for reading file as above ...
Instead of checking each Array-Entry a way like this:
if(magic == magicNumber) {
do something ...
}
Wäre schön zu wissen, ob es eine solche Art und Weise ist - wenn nicht vielen Dank für Teeling mir, dass es keine solche Art und Weise :)
Sie könnten memcpy verwenden, um den Inhalt des char-Arrays in ein unsigned int zu kopieren. 'memcpy (& anZahlInt, magic, sizeof (unsigned int));' – Christoph
Ist eine magische Zahl im Bereich von 'long'? Dann betrachte 'std :: stol' oder vertraut (' stoi' für 'int',' stoll' für 'long long', füge' u' vor 'i' /' l'/'ll' hinzu für unsigned) ... –
Nicht in Binärdatei arbeiten, @LapshinDmitry – user4581301