Quelle est la meilleure façon de mettre à l'échelle uniformément un octet?
Question
En C, je dois redimensionner un uint8_t
de 0 à 255 à 0 à 31
Quel est le meilleur moyen de procéder de la même manière?
La solution
Si vous essayez de passer de 8 bits à 5 bits, vous pouvez effectuer un décalage de 3 bits;
uint8_t scaled = (uint8_t)(original >> 3);
Ceci supprime les 3 bits inférieurs.
Autres conseils
Vous pouvez utiliser une multiplication et une division simples:
uint8_t scaled = (uint8_t)(((uint32_t)original * 32U) / 256U);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow