2016-04-06 16 views
0

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 
+3

"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

+0

@ 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. –

+0

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

Antwort

3

Die ursprünglichen Code kehrt von jedem Fall hat der neue Code fällt durch ... Sie beabsichtigen, auf den Schalter fallen durchbrechen also nicht nutzen?

+0

Ich glaube nicht! Guter Fang - ich werde es versuchen –

+0

Das war es! Manchmal kann ich den Wald für die Bäume nicht sehen ... –

+0

Durch einen Schalter zu fallen, habe ich es öfter gemacht, als ich mich erinnern möchte. – Harry