【发布时间】:2010-10-10 20:30:10
【问题描述】:
在 C 中,我需要将 uint8_t 从 0 - 255 缩放到 0 - 31
均匀地做到这一点的最佳方法是什么?
【问题讨论】:
-
uint8_t 不是 256 位 - 它是 8 位。能否提供更多信息?
-
你是什么意思,确切地说,按比例?
-
256 位完全错误,更新问题,谢谢。
在 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);
【讨论】: