Reputation: 21
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
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
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