Переносимое решение:
unsigned char c[2];
long tmp;
int result;
tmp = (long)c[0] << 8 | c[1];
if (tmp < 32768)
result = tmp;
else
result = tmp - 65536;
Предполагается, что байты в массиве представляют собой 16-битное, двоичное дополнение, целое число со знаком с прямым порядком байтов.Если они представляют собой целое число с прямым порядком байтов, просто поменяйте местами c[1]
и c[0]
.
(В крайне маловероятном случае, если это дополнение, используйте 65535
вместо 65536
в качестве значения длявычесть. Величина знака оставлена как упражнение для читателя;)