2013-07-26 5 views
4

является его правильный способ преобразовать int значение uint8_t:преобразование INT в uint8_t

int x = 3; 
uint8_t y = (uint8_t) x; 

Предположим, что х никогда не будет меньше, чем 0. Хотя gcc не дает никаких предупреждений для вышеуказанных строк, я просто хотел убедиться, правильно ли это сделать или есть лучший способ конвертировать int в uint8_t?

P.S. Я использую C на Linux, если вы собираетесь предложить стандартную функцию

+0

Что будет квалифицироваться как способ _better_? – Nbr44

+3

Нет необходимости в литье. Просто 'y = x;' отлично. –

+0

Nbr44, я имею в виду, что лучше всего это, если есть стандартный способ или если приведенное выше преобразование может вызвать проблему, и альтернативное предложение не вызовет этой проблемы. –

ответ

9

Это правильно, но бросок не нужен:

uint8_t y = (uint8_t) x; 

эквивалентно

uint8_t y = x; 

x является неявным преобразуется в uint8_t перед инициализацией в декларации выше.

+0

Если вы не работаете с Visual Studio, в этом случае вам понадобится '& 0xff', чтобы он не жаловался: P –

+0

Предполагая, что' int' может поместиться в 'short'. – mohit

+0

@DrewMcGowen C не требуется диагностика, это допустимая декларация, и реализация не может отказаться от перевода, но, конечно, реализация может бесплатно выдать дополнительное информационное сообщение. – ouah