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?

¿Fue útil?

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
scroll top