¿Cuál es la mejor manera de escalar uniformemente un byte?
Pregunta
En C necesito escalar un uint8_t
de 0 - 255 a 0 - 31
¿Cuál es la mejor manera de hacerlo de manera uniforme?
Solución
Si está intentando escalar de 8 bits a 5 bits, puede hacer un desplazamiento de 3 bits;
uint8_t scaled = (uint8_t)(original >> 3);
Esto elimina los 3 bits inferiores.
Otros consejos
Puedes usar una simple multiplicación y división:
uint8_t scaled = (uint8_t)(((uint32_t)original * 32U) / 256U);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow