ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
515
515
EMPFEHLEN
-
Hi!
Hat jemand von euch vielleicht einen Algorithmus um die Grösse eines ID3V2.3.0 Tags möglichst schnell und effizient zu berechnen.
Die Grösse ist in vier Byte codiert, wobei das bit 7(von jedem Byte) )immer ignoriert wird.
Bsp.:
257byte -> 00 00 02 01 (Hex)
Gruss Michael
-
Also ich würde das einfach so machen: Wenn ich die Struktur des ID Tags kenne (und du musst sie ja kennen, sonst ist alles andere ja sinnlos), dann weiß ich durch sizeof() die Größe der Struktur. Auf 32 Bit Maschinen kann dir folgende Tabelle in C/C++ helfen:
char = 1 Byte
short = 2 Byte
int = 4 Byte
__int32 = 4 Byte (Win32)
long = 4 Byte (Win32)
__int64 = 8 Byte (Win32)
float = 4 Byte
double = 8 Byte
long double = 8 Byte (Win32)
bool = 1 Byte (Win32)
Vorsicht bei statischen Arrays innerhalb von Strukturen! Diese Struktur
Code :1 2 3 4
struct s { char array[5]; };
ergibt bei sizeof(s) genau 5 Bytes. Dagegen diese:
schon 12 Bytes. Das kommt durch das Byte Alignment, d.h. ein statisches Array richtet sich in diesem Fall nach dem Bytevermögen des größten Datentyps innerhalb der Struktur, in diesem Fall das int mit 4 Bytes. 5 chars benötigen daher 8 Bytes Speicherplatz plus die 4 Bytes vom int ergibt 12 Bytes. Ein bißchen detaillierter:Code :1 2 3 4 5
struct s { char array[5]; int i; };
int gibt 4 Bytes als größter Datentyp der Struktur vor:
1 bis 4 char Felder benötigen ganze 4 Bytes
5 bis 8 char Felder benötigen 2 * 4 Bytes = 8 Bytes
9 bis 12 char Felder benötigen 3 * 4 Bytes = 12 Bytes
usw.
Wäre der größte Datentyp double (8 Bytes), wäre das Alignment eben 8 Bytes. Byte Alignment ist wichtig beim direkten Lesen und Schreiben von zusammengesetzten Datentypen aus bzw. in binären Dateien.
Soviel kurz dazu.
Also besorge dir mal ne Definition der Struktur des ID Tags, implementiere sie und lasse sizeof() mal drüberfahren. Dann weißt du, wie groß sie ist. Übrigens muß Struktur nicht gleich struct sein, darf auch class bedeuten...Geändert von Kriz (10.02.05 um 18:24 Uhr)
-
Hi!
Danke für die "kurze" Antwort.
Wenn ich die richtig verstanden habe ist sie nur nicht die für meine Frage. Wollte nicht wissen, wieviel Platz die vier Byte brauchen, sondern welche Zahl darin codiert ist.
Hab mir auch nochmal Gendanken gemacht und bin zu folgendem gekommen.
Code :1 2 3 4
TagSize = Header[6]*2097152 + Header[7]*16384 + Header[8]*128 + Header[9];
Gruss Michael
-
Hi,
und genau das geht am einfachsten, wenn man die Struktur kennt und den Datenbestand, der dort gespeichert ist. Es muß doch irgendwo eine Beschreibung des Headers geben. Deine Vorgehensweise halte ich für sehr fehlerträchtig und aussagelos. Ein Haufen Bytes, wo ist denn da zu erkennen, wo was wie gespeichert worden ist? Ich hoffe, du verstehst worauf ich hinaus möchte
-
Hi!
versteh vielleicht nicht ganz worauf du hinaus möchtest. deswegen vielleicht die Fage nochmal anderes.
Gegeben:
Vier Byte: xx xx xx xx(Hex)
Aufbau jedes Bytes: 0yyy yyyy(Bin) und damit immer kleiner 0x80
Macht insgesamt:
0yyy yyyy 0yyy yyyy 0yyy yyyy 0yyy yyyy(Bin)
interpretiert wird es aber ohne Nullen:
yyy yyyy yyy yyyy yyy yyyy yyy yyyy(Bin)
Nehmen wir an dieser Stelle ein Beispiel:
00 00 02 01(Hex)->0000 0000 0000 0000 0000 0010 0000 0001(Bin)
interpretiert als
000 0000 000 0000 000 0010 000 0001(Bin)->10 000 0001(Bin)=2^8+1=257(Dez)(grösse des Tags in Byte)
Das ganze hat also erstmal nichts mit Strukturen zu tun.
Gibt es einen nicht Fehler anfälligen und schnellen Algorithmuss der mir die Zahl am Ende berechnet?
Ähnliche Themen
-
grösse anzeigen
Von Mathias_1_2 im Forum PHPAntworten: 0Letzter Beitrag: 27.03.05, 21:28 -
grösse
Von Mathias_1_2 im Forum HTML & XHTMLAntworten: 1Letzter Beitrag: 12.02.05, 00:08 -
datei grösse
Von netrobot im Forum JavaAntworten: 5Letzter Beitrag: 03.09.04, 16:23 -
grösse
Von freekazoid im Forum HTML & XHTMLAntworten: 1Letzter Beitrag: 06.06.02, 15:01 -
Grösse Verändern
Von Sniff im Forum Sonstige Grafik-ProgrammeAntworten: 1Letzter Beitrag: 19.08.01, 12:08





Zitieren
Login






