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 entfernen

    00 = 0 0000000
    00 = 0 0000000
    02 = 0 0000010
    01 = 0 0000001

    0000 0 1 0 0 0 0 0 0 0 1
    ... 512 256 128 64 32 16 8 4 2 1

    Wenn 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);
    }
    

Anmelden zum Antworten