Benutzer-Werkzeuge

Webseiten-Werkzeuge


dateiformat

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
dateiformat [24.04.2015 10:31] – [Padding] martindateiformat [12.03.2026 07:39] (aktuell) – Tippfehler "befinden ich", sollte heißen "befinden sich" bernd
Zeile 1: Zeile 1:
- 
 ====== Buchformat ====== ====== Buchformat ======
  
Zeile 32: Zeile 31:
 </code> </code>
 Ein Buch ohne Skript-Datei bedeutet nicht, dass das Buch keine Skripte enthält. Die binären Skripte befinden Ein Buch ohne Skript-Datei bedeutet nicht, dass das Buch keine Skripte enthält. Die binären Skripte befinden
-ich immer noch einmal (ohne Kommentare) in der ouf-Datei.+sich immer noch einmal (ohne Kommentare) in der ouf-Datei.
  
  
Zeile 50: Zeile 49:
 ====== Die png Datei ====== ====== Die png Datei ======
  
-Ein png-Bild der Größe 140px × 193px(???)+Ein png-Bild mit der Breite 140 Pixel. Die Höhe beträgt maximal 193 Pixel.
  
 ====== Die ouf Datei ====== ====== Die ouf Datei ======
Zeile 60: Zeile 59:
 | Index-Tabelle | n x 12 byte = n x 3 x 32 bit | | Index-Tabelle | n x 12 byte = n x 3 x 32 bit |
 | Padding || | Padding ||
-| MP3 (incl. optionalem ID3-Tag ) / Binärscode ||+| MP3 (incl. optionalem ID3-Tag ) / Binärcode ||
 | Padding || | Padding ||
-| MP3 (incl. optionalem ID3-Tag ) / Binärscode ||+| MP3 (incl. optionalem ID3-Tag ) / Binärcode ||
 | ... || | ... ||
-| MP3 (incl. optionalem ID3-Tag ) / Binärscode ||+| MP3 (incl. optionalem ID3-Tag ) / Binärcode ||
  
  
 ===== Dateikopf ===== ===== Dateikopf =====
  
-| 0 | Startposition der Index-Tabelle | 0x0068 | +| 0 (0x00) | Startposition der Index-Tabelle | 0x0068 | 
-| 4 | unbekannt | 2 | +| 4 (0x04) | unbekannt | 2 | 
-| 8 | erste Ting-ID | 15001 (15000 gefunden; laut "Doku" aber fehlerhaft) | +| 8 (0x08) | erste Ting-ID | 15001 (15000 gefunden; laut "Doku" aber fehlerhaft) | 
-| 12 | letzte Ting-ID | +| 12 (0x0c) | letzte Ting-ID | 
-| 16 | Anzahl der genutzten Ting-IDs | Entspricht nicht immer letzte Ting-ID – erste Ting-ID + 1 (???) +| 16 (0x10) | Anzahl der genutzten Ting-IDs | ''"letzte Ting-ID– "erste Ting-ID+ 1'' 
-| 20 | Buch-ID || +| 20 (0x14) | Buch-ID || 
-| 24 | unbekannt | Werte im Bereich 1 bis 20 gefunden (häufig gefunden: 2, 5, 7 und 11) | +| 24 (0x18) | unbekannt | Werte im Bereich 1 bis 20 gefunden (häufig gefunden: 2, 5, 7 und 11) | 
-| 28 | Erstellungszeitpunkt (???) | UNIX-Timestamp | +| 28 (0x1c| Erstellungszeitpunkt | UNIX-Timestamp | 
-| 32 | unbekannt | 0 | +| 32 (0x20) | unbekannt | 0 | 
-| 36 | unbekannt | 0x0000ffff |+| 36 (0x24) | unbekannt | 0x0000ffff |
  
 ===== Index-Tabelle ===== ===== Index-Tabelle =====
Zeile 92: Zeile 91:
 ===== Padding ===== ===== Padding =====
  
-Die einzelnen Einträge (MP3 oder Binärcode) fangen immer an einer Adresse der Form 0x......00 an. Das Padding erfolgt mit beliebigen Zeichen (meist nullen). Eine Ausnahme bildet das Padding zwischen dem ersten möglichen Anfang des ersten Tracks und dem wirklichen Anfang des ersten Tracks. Dieser muss mit nullen gefüllt sein.+Die einzelnen Einträge (MP3 oder Binärcode) fangen immer an einer Adresse ''X'' an, mit ''(X mod 0x200) == 0''. Das Padding erfolgt mit beliebigen Zeichen (meist nullen).
  
 ===== Funktionen ===== ===== Funktionen =====
Zeile 105: Zeile 104:
  
 <code> <code>
 +
 +
 +private static int getNextAddress(int x) {
 +  x += 0x100 - (x & 0xff);
 +    while(x % 0x200 != 0) {
 +      x += 0x100;
 +    }
 +  return(x);
 +}
 +
 pos = 12 * <Anzahl der Eintrage im Index> + <Startposition der Indextabelle> pos = 12 * <Anzahl der Eintrage im Index> + <Startposition der Indextabelle>
-pos += (0x100 - (pos % 0x100)% 0x100 +pos = getNextAddress(12 * <Anzahl der Einträge im Index> + <Startposition der Indextabelle>); 
-while(<Die 12 (???Bytes an der Stelle pos sind 0>) { +while(!isMp3(<daten ab pos>&& !isScript(<daten ab pos>)) { 
- pos += 0x100;+ pos += 0x200;
 } }
 </code> </code>
Zeile 132: Zeile 141:
 private static int getCodeFromPositionInFile(int position, int n) { private static int getCodeFromPositionInFile(int position, int n) {
   if(((position & 0xFF) != 0x0) | (n < 0)) {   if(((position & 0xFF) != 0x0) | (n < 0)) {
-    return(-1);+    return -1;
   }   }
   n--;   n--;
Zeile 139: Zeile 148:
     int v = (b - E[k]) << 8;     int v = (b - E[k]) << 8;
     if(getPositionInFileFromCode(v, n + 1) == position) {     if(getPositionInFileFromCode(v, n + 1) == position) {
-      return(v);+      return v;
     }     }
   }   }
-  return(-1);+  return -1;
 } }
  
Zeile 154: Zeile 163:
 public static int getPositionInFileFromCode(int code, int n) { public static int getPositionInFileFromCode(int code, int n) {
   if(((code & 0xFF) != 0x0) | (n < 0)) {   if(((code & 0xFF) != 0x0) | (n < 0)) {
-    return(-1);+    return -1;
   }   }
   n--;   n--;
Zeile 162: Zeile 171:
           (((code >> 9) & 0x1) << 4);           (((code >> 9) & 0x1) << 4);
   code -= n * 0x1A - E[c];   code -= n * 0x1A - E[c];
-  return(code << 8);+  return code << 8;
 } }
 </code> </code>
 +
dateiformat.1429871484.txt.gz · Zuletzt geändert: (Externe Bearbeitung)