Combining Two Uint8_T as Uint16_T
I Have the Following Data Uint8_T D1=0X01; Uint8_T D2=0X02; I Want to Combine Them as Uint16_T as Uint16_T Wd = 0X0201; How Can I Do It? 4 Answers You Can Use...
I have the following data
uint8_t d1=0x01;
uint8_t d2=0x02;
I want to combine them as uint16_t as
uint16_t wd = 0x0201;
How can I do it?
4 Answers
You can use bitwise operators:
uint16_t wd = ((uint16_t)d2 << 8) | d1;
Because:
(0x0002 << 8) | 0x01 = 0x0200 | 0x0001 = 0x0201
The simplest way is:
256U*d2+d1
This is quite simple. You need no casts, you need no temporary variables, you need no black magic.
uint8_t d1=0x01;
uint8_t d2=0x02;
uint16_t wd = (d2 << 8) | d1;
This is always well-defined behavior since d2 is always a positive value and never overflows, as long as d2 <= INT8_MAX.
(INT8_MAX is found in stdint.h).
(uint16_t)((d2 << 8) + (d1 & 0x00ff))