Ich habe einen Abschnitt des Codes, der manchmal korrekte Ergebnisse erzeugt. Der einzige Unterschied ist, dass ich das Ergebnis in einer Zwischenvariablen abspeichere.Speichern Ergebnis in Variable gibt seltsame Ergebnisse
Die Gesamtfunktion Signatur ist:
FS_FATEntry getFATEntryForCluster(FS_Cluster cluster, FS_Instance * fsi)
Dies funktioniert:
switch (fsi->type) {
case FS_FAT12:
if (cluster % 2)
return ((*((uint16_t *)&FATSector[entOffset])) >> 4);
else
return ((*((uint16_t *)&FATSector[entOffset])) & 0x0FFF);
case FS_FAT16:
return (*((uint16_t *)&FATSector[entOffset]));
case FS_FAT32:
return ((*((uint32_t *)&FATSector[entOffset])) & 0x0FFFFFFF);
}
Dies gilt nicht: (beachten Sie, dass FS_FATEntry als uint32_t
typedef'd ist)
FS_FATEntry entry = 0xFFFFFFFF;
switch (fsi->type) {
case FS_FAT12:
if (cluster % 2)
entry = ((*((uint16_t *)&FATSector[entOffset])) >> 4);
else
entry = ((*((uint16_t *)&FATSector[entOffset])) & 0x0FFF);
case FS_FAT16:
entry = (*((uint16_t *)&FATSector[entOffset]));
case FS_FAT32:
entry = ((*((uint32_t *)&FATSector[entOffset])) & 0x0FFFFFFF);
}
free(FATSector);
printf("Cluster %04X : %04X Entry\n", cluster, entry);
return entry;
Wenn das zweite Stück läuft Code, das ist ein Schnipsel der Ausgabe erhalte ich:
Cluster 00F9 : FB0FA0 Entry
Cluster 00FA : D0FC0FB Entry
Cluster 00FB : FD0FC0 Entry
Cluster 00FC : F0FE0FD Entry
Cluster 00FD : FF0FE0 Entry
Cluster 00FE : 11000FF Entry
Cluster 00FF : 1011000 Entry
Cluster 0100 : 3102101 Entry
Cluster 0101 : 1031021 Entry
Cluster 0102 : 5104103 Entry
Cluster 0103 : 1051041 Entry
Cluster 0104 : 7FFF105 Entry
Cluster 0105 : 107FFF1 Entry
Cluster 0106 : FFFF107 Entry
Cluster 0107 : FFFFFF1 Entry
Cluster 0108 : B10AFFF Entry
Cluster 0109 : 10B10AF Entry
Cluster 010A : D10C10B Entry
Cluster 010B : 10D10C1 Entry
Cluster 010C : F10E10D Entry
Cluster 010D : FFF10E1 Entry
Cluster 010E : 1110FFF Entry
Cluster 010F : 111110F Entry
"Dies ist ein Schnittpunkt des Ausgangs". Sie müssen mehr tun, als nur die Ausgabe auszugeben. Sie müssen erklären, was es mit der Ausgabe zu tun hat, die wir bemerken sollen. Ich nehme an, dass es in irgendeiner Weise falsch ist. Bitte sagen Sie uns, was die tatsächliche Ausgabe sein soll. Und Sie sollten wirklich eine [minimal vollständige und überprüfbare] (https://stackoverflow.com/help/mcve) Version Ihres Codes bereitstellen. – kaylum
@ kaylum Ich werde die erwartete Ausgabe hinzufügen. Ein MWE wäre extrem schwierig, da es viele Dateien und ein FAT12 Disk Image benötigt. –
Wahrscheinlich keine Notwendigkeit. Sieht so aus, als hättest du schon eine vollkommen gute Antwort. Aber notieren Sie sich, um zukünftige Fragen zu verbessern. – kaylum