Search code examples
ccharprintftype-conversionuint8t

Data type conversion uint8_t/uint16_t to char[] via snprintf


char data[40] = {'\0'};
uint8_t Plevel= 0xA5;
uint8_t status = 0x21;
uint16_t ID = 0xABCD;

snprintf(data, 5, "%"PRIu8"%"PRIu8"%"PRIu16"",Plevel, status, ID );
printf("data:%s\n",data);

outputs: 1653

I use http://www.asciitohex.com/ to see the conversion but couldn't get why it outputs 1653.

Could anyone please explain the conversions?


Solution

  • 0xA5 outputs 165. 0x21 outputs 33. 0xABCD outputs 43981. This gives 1653343981. But your output string size is restricted to 5 (including the nul terminator) and so you get 1653.