LINUX.ORG.RU

История изменений

Исправление Obezyan, (текущая версия) :

Возможно, я не совсем понял задачу в 3 часа ночи, но сонный обезьянний мозг выдаёт что-то типа:

uint8_t data[4];

uint32_t val;

uint8_t *convert_32_to_8(uint32_t data, uint8_t flag);

void test() {
    val = 0x12345678;

    for (uint8_t i=0; i<4; i++)
    {
      data[i] =
(*convert_32_to_8(val, i)); 
    }

    // остальная логика работы с data 
} 

uint8_t *convert_32_to_8(uint32_t data, uint8_t flag)
{
  switch(flag)
  {
    case 0: temp = (uint32_t) (data>>24); break;
    case 1: temp = (uint32_t) (data>>16); break;
    case 2: temp = (uint32_t) (data>>8); break;
    case 3: temp = (uint32_t) (data); break;
    default: temp = 0xFF; break;
  }
  return &temp;
}

цикл можете сами развернуть по желанию.

Логика: левую границу окна байт контролируем сдвигом вправо, правую - кастом uint8_t.

Исходная версия Obezyan, :

Возможно, я не совсем понял задачу в 3 часа ночи, но сонный обезьянний мозг выдаёт что-то типа:

uint8_t data[4];

uint32_t val;

uint8_t *convert_32_to_8(uint32_t data, uint8_t flag);

void test() {
    val = 0x12345678;

    for (uint8_t i=0; i<4; i++)
    {
      data[i] =
(*convert_32_to_8(val, i)); 
    }

    // остальная логика работы с data 
} 

uint8_t *convert_32_to_8(uint32_t data, uint8_t flag)
{
  switch(flag)
  {
    case 0: temp = (uint32_t) (data>>24); break;
    case 1: temp = (uint32_t) (data>>16); break;
    case 2: temp = (uint32_t) (data>>8); break;
    case 3: temp = (uint32_t) (data); break;
    default: temp = 0xFF; break;
  }
  return &temp;
}

цикл можете сами развернуть по желанию.