C: Åtkomst av (5,6,7)-bitars värden i array
Postat: 9 maj 2020, 12:45:35
Hej!
Jag undrar om det finns något bra sätt att komma åt dom olika sektionerna i ett datapaket när sektioner är uppdelade över två olika bytes?
Jag har gjort ett misslyckat försök med en union innehållande en struct och bitfälts-variabler med olika bredd, det blev väldigt konstiga värden då.
Första fältet (cmd) är 6 bitar brett, sen 5 bitar (func) och resterande är 7 bitar breda.
Det som jag gjort här nedan fungerar, men frågan är om det går att göra på något bättre sätt?
Jag undrar om det finns något bra sätt att komma åt dom olika sektionerna i ett datapaket när sektioner är uppdelade över två olika bytes?
Jag har gjort ett misslyckat försök med en union innehållande en struct och bitfälts-variabler med olika bredd, det blev väldigt konstiga värden då.
Första fältet (cmd) är 6 bitar brett, sen 5 bitar (func) och resterande är 7 bitar breda.
Det som jag gjort här nedan fungerar, men frågan är om det går att göra på något bättre sätt?
Kod: Markera allt
#include <stdint.h>
uint8_t frame[4] = {0x94, 0x59, 0x28, 0x40};
// [0] [1] [2] [3]
// 1001 0100 0101 1001 0010 1000 0100 0000
// | || || || || |
// Cmd Func Blue Green Red
// 0x25 0x02 0x64 0x50 0x40
int main(void)
{
uint8_t cmd = frame[0] >> 2;
uint8_t func = ((frame[0] & 0x03) << 3) | (frame[1] >> 5);
uint8_t blue = ((frame[1] & 0x1f) << 2) | (frame[2] >> 6);
uint8_t green = ((frame[2] & 0x3f) << 1) | (frame[3] >> 7);
uint8_t red = frame[3] & 0x7f;
return 0;
}