1

在 CI 中需要将 auint8_t从 0 - 255 缩放到 0 - 31

均匀地做到这一点的最佳方法是什么?

4

2 回答 2

12

如果您尝试从 8 位扩展到 5 位,则可以进行 3 位移位;

uint8_t scaled = (uint8_t)(original >> 3);

这会丢弃低 3 位。

于 2009-03-02T19:13:58.623 回答
1

您可以使用一些简单的乘法和除法:

uint8_t scaled = (uint8_t)(((uint32_t)original * 32U) / 256U);
于 2009-03-02T19:17:31.657 回答