Hej.
Jag har ett 32-bitars heltal som jag bara vill ha ut en viss byte ur. Det vill säga åtta bitar på en viss position i 32-bitarstalet. Har nyligen börjat med C så jag har inte så stor aning om hur man skulle kunna göra detta.
Mycket tacksam för svar.
//jack
C-fråga (PIC)
Jag skrev några macron till C18 (microchips kompilator) för just detta. De ser hemskt fula ut men ger bra kod (iaf just med den kompilatorn).
Går att använda typ:
PORTB = BYTE3(var);
Eller:
BYTE2(var) = PORTB;
Kod: Markera allt
#define BYTE1(x) (*((unsigned char *)(&(x))))
#define BYTE2(x) (*(((unsigned char *)(&(x))+1)))
#define BYTE3(x) (*(((unsigned char *)(&(x))+2)))
#define BYTE4(x) (*(((unsigned char *)(&(x))+3)))
PORTB = BYTE3(var);
Eller:
BYTE2(var) = PORTB;
Standart är:
Då kan du komma åt 'SomeValue.TheBigOne' som en 32 bitars heltal samt 'SomeValue.InBytes[0]' som bytes. Indexeringen kan såklart vara 0 - 3.
Kod: Markera allt
union
{
unsigned long TheBigOne;
unsigned char InBytes[4];
} SomeValue;