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

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