Leider liefern alle Versuche falsche Ergebnisse.
In dem Artikel wird es so erklärt:
So for example a 4 byte integer 0x000000FF whose binary representation is 00000000 00000000 00000000 11111111 will be represented as 00000000 00000000 00000001 01111111 in the synchronization safe format. If any of the MSB of a byte is 1, then it is shifted above on the next significant byte.
Gemacht wird das damit ein MP3 Codec diese bytes nicht für Audiodaten hält, da das Bit 7 immer 0 ist.
Also die vier byte des integer so bearbeiten das bit 7 = 0 ist und die evtl. 1 um eins nach links geschoben wird.
Trotzdem melden alle Programme Fehler "Bad Header" etc. weil die so kodierten / dekodierten integer falsche Werte liefern.
Lese ich die Tags aus einem Audio-File und dekodiere sie nach diesem Verfahren wird dann für eine 7 MB MP3 Datei die Länge von 63.568.935 GB ausgegeben was definitiv nicht stimmt.
Sehe ich den Wald vor lauter Bäumen nicht ? Hat jemand eine Idee dazu ?
Auch das hier liefert die gleichen falschen Ergebnisse:
Code: Alles auswählen
function DeCode(i : integer) : integer;
var
bytes : array[0..3] of byte;
begin
move(i,bytes,4);
bytes[0] := bytes[0] shl 21;
bytes[1] := bytes[1] shl 14;
bytes[2] := bytes[2] shl 7;
move(bytes,i,4);
result := i;
end;