Каков наилучший способ равномерно масштабировать один байт? - PullRequest
1 голос
/ 02 марта 2009

В C мне нужно масштабировать uint8_t от 0 - 255 до 0 - 31

Каков наилучший способ сделать это равномерно?

Ответы [ 2 ]

12 голосов
/ 02 марта 2009

Если вы пытаетесь масштабировать от 8 до 5 бит, вы можете сделать 3-битное смещение;

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

Это отбрасывает младшие 3 бита.

1 голос
/ 02 марта 2009

Вы можете использовать простое умножение и деление:

uint8_t scaled = (uint8_t)(((uint32_t)original * 32U) / 256U);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...