Qual é a melhor forma de escalar uniformemente um byte?
Pergunta
Em C I necessidade de dimensionar um uint8_t
0-255, 0 - 31
Qual é a melhor maneira de fazer isso de forma uniforme?
Solução
Se você está tentando escala de 8 bits para 5 bits, você pode fazer uma mudança 3 bit;
uint8_t scaled = (uint8_t)(original >> 3);
Esta cai inferiores 3 bits.
Outras dicas
Você pode usar algumas simples multiplicação e divisão:
uint8_t scaled = (uint8_t)(((uint32_t)original * 32U) / 256U);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow