C Integer aufteilen

nightmarevs

Cadet 4th Year
Dabei seit
Feb. 2009
Beiträge
102
Ich stehe momentan ein wenig auf dem Schlauch.
Ich habe einen int den ich aufteilen muss und zwar wie folgt: Die ersten 7 bit in ein byte, die zweiten 7 bit in ein byte, die dritten 7 bit in ein byte und dann nochmal 4bit in ein byte. Da ich mich länger nicht mehr mit c beschäftigt habe komme ich nicht auf die Lösung. Ich weis das es eigentlich recht einfach ist weil ichs früher schon gemacht habe aber ich kann mich nicht mehr daran erinnern wie :freak:
 
S

Stefan_Sch

Gast
Bitshifting und Bitmaskierung sind deine Freunde!

PHP:
#include <stdio.h>

void putbits(unsigned int n, int digits)
{
    int i;

    for(i = digits; i >= 0; --i) {
        putchar( ((n >> i) & 1) + '0');

        if(i % 4 == 0 && i > 0)
            putchar(' ');
    }
}

int main()
{
    unsigned char b1, b2, b3, b4;
    unsigned int num = 0xFAFBFCFD;

    b1 = num & 0x0000007F;
    b2 = (num >> 7) & 0x0000007F;
    b3 = (num >> 14) & 0x0000007F;
    b4 = (num >> 21) & 0x0000000F;

    putbits(b1, 7);

    return 0;
}
 

nightmarevs

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Feb. 2009
Beiträge
102
Danke für die schnelle Antwort.
Das es was mit bitshifting zu tun hat wusste ich auch noch aber das und habe ich bei meinen überlegungen vergessen und deswegen hats natürlich nicht geklappt.

Nur eines verstehe ich gerade nicht so ganz wozu das putbits() beim ersten wert?
 
S

Stefan_Sch

Gast
Naja, wenn du C kannst, sollte eigentlich offensichtlich sein was putbits() macht.

Diese Hilfsfunktion habe ich dir geschrieben, damit du die Bits sehen kannst. Die Funktion gibt eine Zahl in Binärnotation aus. Der Parameter digits bestimmt die Zahl der Stellen. Bei einem int sind das auf einem 32-Bit System 31, bei einem char eben 7 immer inklusive der 0.

Die Zeile

Code:
putbits(b1, 7);
zeigt die also etwas in der folgenden Art an.

Code:
1101 1001
 

nightmarevs

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Feb. 2009
Beiträge
102
ok daran hab ich gar nicht gedacht da der code auf einem gerät ohne ausgabemöglichkeit läuft
 
Top