ما هو أفضل وسيلة لتوسيع نطاق بالتساوي بايت واحد؟
سؤال
في C أحتاج إلى تحجيم uint8_t
0-255 الى 0-31
ما هي أفضل طريقة للقيام بذلك بالتساوي؟
المحلول
إذا كنت تحاول توسيع نطاق من 8 بت إلى 5 بت، يمكنك القيام تحول 3 بت؛
uint8_t scaled = (uint8_t)(original >> 3);
وهذا يسقط أقل 3 بت.
نصائح أخرى
ويمكنك استخدام بعض الضرب البسيط والانقسام:
uint8_t scaled = (uint8_t)(((uint32_t)original * 32U) / 256U);
لا تنتمي إلى StackOverflow