Quelle est la meilleure façon de mettre à l'échelle uniformément un octet?

StackOverflow https://stackoverflow.com/questions/603569

  •  03-07-2019
  •  | 
  •  

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?

Était-ce utile?

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