-         

Ergebnis 1 bis 3 von 3

Thema: Zerlegung

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2005
    Ort
    Stuttgart
    Beiträge
    260

    Zerlegung

    Anzeige

    Hio. Kleine Frage: Wie kann ich z. B. ein Byte in seine Bits zerlegen oder wie kann ich z. B. eine Variable vom Typ uint32_t in seine einzelnen Bits/Bytes zerlegen? D. h. ich muss an jedes einzelne Bit/Byte eines Bytes/... kommen. Hätte mir vielleicht jemand ein Beispiel? Wäre sehr dankbar dafür.

    Gruß
    Lutz

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.07.2005
    Ort
    Fröndenberg
    Beiträge
    105
    Also unter den mesiten Hochsprachen geht das mit Maskieren. Du nimmst dein Byte und machst dazu ein AND mit dem Bitwert. So kann man auch mehrere Bits gleichzeitig prüfen.

    Beispiele:
    01001011 = 75

    mit AND 1 (00000001) gibt es ein True zurück da die 1 gesetzt ist.
    mit AND 4 (00000100) gibt es ein False zurück da die 4 nicht gesetzt ist.

    Im Code wäre das dann eine einfache IF-Abfrage (VB zB)
    IF byte AND wert THEN mache etwas
    C ya, Grusim

    Anfänger in der Elektronik

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    So was?
    Code:
    typedef union
    {
    	uint32_t l;
    	uint8_t b[4];
    	struct
    	{
    		unsigned int bit0:1;
    		unsigned int bit1:1;
    		unsigned int bit2:1;
    		...
    	};
    } blah_t;
    
    blah_t foo (blah_t blah)
    {
    	blah.bit2 = 0;
    	
    	if (blah.bit0)
    		blah.b[3] = 0;
    	
    	return blah;
    }
    Indirekter Zugriff auf die Elemente eines Bitfeldes gehen nicht. Wenn du das haben willst, musst du selber rumfummeln.

    ::Edit::

    Zu beachten ist dabei noch, daß es sich dabei um GNU-C handelt. Andere C-Compiler verschlucken sich evtl an dem anonyman struct. In diesem Falls einfach einen Namen vergeben, dann sind aber die Zugriffe lästiger.

    Für so was kann man auch Initializer schreiben. Beim Initialisieren des Anonymous muß der aber ganz vorne stehen im typedef.
    Code:
    blah_t blubb = 
    {
    	{
    		.bit2 = 1
    	},
    	.b[3] = 4
    };
    Disclaimer: none. Sue me.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •