ما هو أفضل وسيلة لتوسيع نطاق بالتساوي بايت واحد؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

في 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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top