Как полбайтовые числа упаковать в 4 байтвое число, при помощи арифметических действий?
uint32_t put_nibble(uint32_t v, int nibble_index, uint32_t nibble)
{
uint32_t p = 1;
uint32_t r;
int i;
for (i = 0; i < nibble_index; ++i)
p *= 16;
r = (v % p) + (nibble * p);
if (nibble_index < 7)
r += (v / (p * 16)) * p * 16;
return r;
}