ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1042370 Топик полностью
Nikolay801_ (06.10.2020 11:01, просмотров: 196) ответил Aleksey_75 на когда 2 литра мало , а 4 много ))) как "замутить" переменную на 3 байта ? )))
Мне не видно простых способов сделать через битовы поля. 

Проще/надежней сделать массив из байт и функции взять/положить по 3

Но реально, нах такую экономию, округлить размер до 4-х и не ипать моск.

typedef __packed struct ThreeByte_tag{
#define TB_SZ   (100)
  uint8_t body [TB_SZ * 3];
  uint32_t get(int indx){
    uint32_t ret = 0;
    if (indx >= TB_SZ)
      return 0;
    ret = body[indx * 3] ;
    ret |= body[indx * 3 + 1] << 8;
    ret |= body[indx * 3 + 2] << 16;
    //ret = 0xFFFFFF & (*(uint32_t* ) (&body[3*indx])); //possible alignment trouble
    return ret;
  };
  void set(int indx, int val){
    if (indx >= TB_SZ)
      return;
    body[indx * 3] = val;
    body[indx * 3 + 1] = val >> 8;
    body[indx * 3 + 2] = val >> 16;
  };
} ThreeByte, *PThreeByte;
Будь ты проклят, Перри-Утконос!