Sida 1 av 1
C-fråga (PIC)
Postat: 16 maj 2005, 21:12:52
av jack
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
Postat: 16 maj 2005, 21:22:32
av cyr
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).
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)))
Går att använda typ:
PORTB = BYTE3(var);
Eller:
BYTE2(var) = PORTB;
Postat: 16 maj 2005, 21:26:19
av Icecap
Standart är:
Kod: Markera allt
union
{
unsigned long TheBigOne;
unsigned char InBytes[4];
} SomeValue;
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.
Postat: 16 maj 2005, 21:34:37
av jack
Tack för svar. Tror dock att jag inte var tydlig nog (eller så förstod jag inte er kod). Det jag vill göra är att ta ut åtta bitar från vilken plats som helst, inte bara exakt byte 1,2,3 eller 4.
Om jag har missförstått er så får ni gärna förklara er kod
Tack.
Postat: 16 maj 2005, 21:39:48
av cyr
Skifta (och maska).
bytevar = (longvar >> nbits) & 0xff;
Typ... (nbits bestämmer från vilken position man plockar).