Bit Mannipulation + Berechnung
-
Hey,
ich habe ein Problem. Ich entwickel gerade einen ID3TagDecoder und habe Probleme die Größe im Header zu berechnen.Ich bekomme vier Bytes $00 00 02 01
Jetzt muss ich das MSB entfernen00 = 0 0000000
00 = 0 0000000
02 = 0 0000010
01 = 0 00000010000 0 1 0 0 0 0 0 0 0 1
... 512 256 128 64 32 16 8 4 2 1Wenn ich das Ergebnis jetzt zumsammen rechne, komme ich auf 257 Bytes.. das etnspricht auch exakt dem Ergebnis, das auf www.id3.org vorgerechnet wird.
Ich habe jetzt aber keine Ahnung wie ich das per C berechnen kann.ich habe die Bytes in folgende Variablen gespeichert:
id3_size[0] (00)
id3_size[1] (00)
id3_size[2] (02)
id3_size[3] (01)die ersten beiden Bytes lass ich eifnach mal weg, da sich ja eh auf 0 Bytes gesetzt sind.
so stelle ich mir das theoretisch vor
unsigned char id3_size[4] = {0}; unsigned char test_1[2] = {0}; unsigned char test_2[2] = {0}; unsigned char test_3[2] = {0}; ////////// //////////fill size... ////////// memcpy(&test_1[0],&id3_size[2], 1); memcpy(&test_2[1],&id3_size[3], 1); test_1[0] >>= 1; test_3 = (test_1 | test_2); printf("%i",test_3);
vielen dank
mfg lenni
-
Ich hab's mal so gemacht:
#include <stdio.h> int main() { //fill size unsigned char id3_size[] = {0, 0, 2, 1}; int i; int tmp; int result = 0; for(i = 0; i < 3; ++i) //first 3 Bytes { tmp = id3_size[i] & 127; //remove MSB tmp = tmp << (8 * (3 - i) - 1); //shift to correct position result = result | tmp; } tmp = id3_size[i] & 127; //last Byte result = result | tmp; printf("size = %d\n", result); }