ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
2 мая
1008096 Топик полностью
Nikolay_Po (31.05.2020 17:51, просмотров: 367) ответил VLLV на Эфемерное "good practice" в программировании на С: Данность : есть массив[x] массивов[3]. Эти три байта на самом деле битовая структура, но для экономии места обрезали один байт. Как сделать доступ к полям структуры по индексу из нескольких мест? Два варианта:
Зачем копирование в первом варианте? Доступ к чему по индексу должен быть? К байтам? Или к битам (ХЗ как)? 

Так не работает?


typedef union {
struct {
uint8_t a;
uint8_t b;
uint8_t c: 5;
uint8_t d: 4;
} AsBitField;
uint8_t AsByte[3];
} Sample_t;

Sample_t Data[341] = {{0}};



Ну и доступ именно что по индексу делать, а не указателем. Должно работать. Если компилятор нормальный, не сильно медленно. А если хочется максимальной скорости и полного контроля, то работать с данными как с массивом uint32_t. И да, сдвигом и битовыми операциями.