2016-04-19 2 views
2

Кто-нибудь знает, как я могу сделать правильное преобразование из uint16 в uint8 в программе на C для моего STM32F091?Преобразование из uint16 в uint8

Я думал, что это было так:

uint16_t Test = 0x565; 
uint8_t Test2 = (uint8_t)Test; 

Но это не очень хорошо работает, так же у кого есть предложение?


[обновление от comment:]

Я использую потенциометр, который имеет минимальное значение 0x0 и максимальное значение 0xFFF. Тест должен иметь значение ADC1-> DR (это значение с АЦП в STM32F0)

+2

Какой тип "16uint" и "8uint"? В тексте используются разные типы. Что вы имеете в виду с «не работает хорошо»? Зачем? В каком смысле? – Olaf

+4

Вы не можете получить кварту в банкноты пинты. –

+0

Из-за переполнения? Это очень вероятно. – Ian

ответ

3

Edit:

Вы не можете сжимать данные без потери информации в этом случае. Поскольку ваш диапазон данных от АЦП составляет от 0x000 до 0xFFF, вы не можете идеально представлять данные без информации/точности, потерянной в байтах uint8, диапазон которых находится только от 0x00 до 0xFF

Но вы все еще можете отображать данные с точность потеряна. Например:

uint8_t Test2 = (unsigned)(Test >> 4); 

заставит вас карту каждый 16 диапазона в одно значение:

0-15 -> 0 
16-31 -> 1 
32-47 -> 2 
//and so on 

Поскольку у вас есть только 8 светодиодов в любом случае, вы могли бы использовать Uint8 байты для управления светодиодом - хоть ты потеряет точность реальной стоимости, но вы все еще в состоянии представить диапазон стоимости (за единицу 16) правильно с 8 светодиодов (так как вы только есть 8 светодиодов в любом случае)

Оригинал:

Случай весьма вероятно, причина переполнения, когда вы приводите больший размер типа uint16 данных меньшего размера uint8:

uint16_t Test = 0x565; 
uint8_t Test2 = (uint8_t)Test; //Test2 value is only 0x65, 0x500 is missing 

Отливка вызывает наиболее существенное значение в байтах (0x500) быть усеченным.

+0

Но разве OP не будет знать о потере данных? – CinCout

+0

@ HappyCoder может быть или не быть. Но, судя по коду, более вероятно, что он не знает. – Ian

+2

Вздох, что с этим сегодня. Downvote по непонятной причине. Хотя мы можем помочь новому пользователю «научить ловить рыбу», вместо этого выбирается нижняя часть ответа. – Ian

Смежные вопросы