Bits teilen in C
-
Hallo,
ich habe folgende Long Variable: FFEEDDCC So steht die im Speicher. Ich möchte nun das ganze irgendwie in Bytes aufteilen und in einzelne Integer Variablen reinschieben, also das sowas rauskommt
Int1 = FF
Int2 = EE
Int3 = DD
Int4 = CCWie mache ich das? Ich komme nicht weiter und stehe auf dem Schlauch.
Ich hoffe Ihr könnt mir helfen
Gruß
Sebastian
-
Hallo Sebastian,
schau dir mal in einem Buch das Kapitel bit shifts und
logische Operationen an.#include <stdio.h> #include <stdlib.h> static unsigned int int2byte(unsigned int a, int i) { unsigned int res = 0; unsigned int mask = 0xff; int j; for (j=0; j<i; ++j) mask = mask << 8; res = a & mask; for (j=0; j<i; ++j) res = res >> 8; return res; } int main (void) { unsigned int a = 0xFFEEDDCC; int i; printf("a: 0x%x size: %u\n", a, sizeof(a)); for (i=0; i<4; ++i) printf("a[%d]: 0x%x\n", i, int2byte(a, i)); return 1; }
Gruß
mcr
-
Bits sind unteilbar. 0 oder 1 da kann man nix mehr teilen.
-
umständlicher geht's wohl nicht^^
#define int2byte(a,i) ((a)>>((i)<<3)&0xff)
-
Stimmt, du hast Recht, das war schon ziemlich umständlich.
Ich hatte vorher eine andere Idee, die sich dann mit dem
Vorschlag von mir vermischt hat.Gruß mcr
-
shifter schrieb:
umständlicher geht's wohl nicht^^
#define int2byte(a,i) ((a)>>((i)<<3)&0xff)
Oh net, was für Compiler verwendest du denn die i*8 nicht zu nem shift optimieren...
-
Tim schrieb:
shifter schrieb:
umständlicher geht's wohl nicht^^
#define int2byte(a,i) ((a)>>((i)<<3)&0xff)
Oh net, was für Compiler verwendest du denn die i*8 nicht zu nem shift optimieren...
das war aus den fingern gesaugt. sollte für jeden compiler gut sein.
-
Tim schrieb:
Oh net, was für Compiler verwendest du denn die i*8 nicht zu nem shift optimieren...
Ist schon richtig so mit Shift, da dies genau der Intension entspricht.