Соедините MSB и LSB 16-разрядного целого числа со знаком (дополнение до двух) - PullRequest
1 голос
/ 05 июля 2010

Я работаю с проприетарным протоколом, который передает целые числа как дополнение 16 бит два в двух частях. LSB передается первым, а затем MSB. Правильный ли следующий код для восстановления исходного значения?

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

Ответы [ 2 ]

1 голос
/ 05 июля 2010

Я считаю, что код не будет работать, если short не 16 бит, поэтому ваш код может не работать на некоторых платформах.Вы, возможно, никогда не найдете платформу, на которой происходит сбой.

int16_t, если она доступна на вашей целевой платформе (ях), может быть лучшим выбором.

0 голосов
/ 05 июля 2010

Ваш код выглядит правильно, но вы можете использовать встроенные функции C, чтобы гарантировать, что ваш протокол действительно независим от платформы:

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

...