Marco
Marco

Reputation: 21

Join MSB and LSB of a 16 bit signed integer (two's complement)

I'm working with a proprietary protocol that transmits integers as 16 bit two's complement in two parts. The LSB is transmitted first followed by the MSB. Is the following code to restore the original value correct?

unsigned char message[BLK_SIZE];
// read LSB to message[0] and MSB to message[1]
short my_int = (message[1] << 8) | message[0];

Upvotes: 2

Views: 3743

Answers (2)

codymanix
codymanix

Reputation: 29490

Your code looks correct, but you could use intrinsic C functions for ensuring that your protocol is truly platform independant:

short my_int = ntohs(*(short*)message)

Upvotes: 1

JosephH
JosephH

Reputation: 37505

I believe that code will fail if short is not 16 bits, so your code may fail on some platforms. You may never find a platform it fails on though.

int16_t, if available on your target platform(s), may be a better choice.

Upvotes: 2

Related Questions