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 bitwise operators:

uint16_t wd = ((uint16_t)d2 << 8) | d1;

Because:

 (0x0002 << 8) | 0x01 = 0x0200 | 0x0001 = 0x0201
11

The simplest way is:

256U*d2+d1
4

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).

10
(uint16_t)((d2 << 8) + (d1 & 0x00ff))

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Alexander Ross

Alexander Ross

Gaming, Esports & Interactive Media Writer

Alexander Ross has covered the video game industry for a decade, writing deep dives on game design, esports tournaments, VR developments, and gaming culture.

Share this article
Twitter Facebook Pinterest