Мой сервер получает 6 байтов данных: 2 байта головы и 1 переменная состоят из последних 4 байтов в порядке Большого Эндиана (в примере ниже переменная равна 100000 десятичных)
00000001 head
00000001
10100000 start 4 bytes of variable (100000 decimal)
10000110
00000001
00000000
Я хочу прочитать эту переменную, используя этот код ниже (buf содержит данные выше)
unsigned char buf[MAX_s];
int32_t var = (buf[2] << 24) | (buf[3] << 16) | (buf[4] << 8) | buf[5];
printf(" %u \n",var);
но ожидаемый результат не 100000, а некоторое другое большее число. Что я делаю неправильно?
Вы отправили 6 байтов, преобразованных в шестнадцатеричные, следующие:
01 01 A0 86 01 00
Если вы определяете байты 2-5 как большой аргумент, объединенное число равно 0xA0860100 = 2693136640. Это номер, который вы получили?
100000 = 0x000186a0. Если вы ожидали, что число будет равным 100000, похоже, что ваш байтовый поток содержит незначительные данные по endian, а не большой endian. Переверните преобразователь, чтобы исправить это:
int32_t var = (buf[5] << 24) | (buf[4] << 16) | (buf[3] << 8) | buf[2];