15

is it a correct way to convert an int value to uint8_t:

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

assume that x will never be less than 0. Although gcc does not give any warning for the above lines, I just wanted to be sure if it is correct to do it or is there a better way to convert int to uint8_t?

P.S. I use C on Linux if you are going to suggest a standard function

Johan Elmander
  • 497
  • 2
  • 6
  • 11

1 Answers1

22

It is correct but the cast is not necessary:

uint8_t y = (uint8_t) x;

is equivalent to

uint8_t y = x;

x is implicitely converted to uint8_t before initialization in the declaration above.

ouah
  • 142,963
  • 15
  • 272
  • 331
  • 1
    Unless you're working with Visual Studio, in which case you'll need a `& 0xff` to keep it from complaining :P – Drew McGowen Jul 26 '13 at 13:30
  • Assuming that `int` can fit in `short`. – mohit Jul 26 '13 at 13:31
  • @DrewMcGowen no diagnostic is required by C, this is a valid declaration and the implementation cannot refuse to do the translation but of course the implementation is free to issue an extra informational message. – ouah Jul 26 '13 at 13:33
  • @ouah yes I'm aware of it, just thought I should point out VS's behavior – Drew McGowen Jul 26 '13 at 13:33
  • @EricPostpischil fixed. I always have in mind this C quote for initialization *the same type constraints and conversions as for simple assignment apply*. – ouah Jul 26 '13 at 13:49