У меня 4 байта:

buffer_RX[3]= \x70;
buffer_RX[4]= \xb4;
buffer_RX[5]= \xc5;
buffer_RX[6]= \x5a;

Я хочу объединить их, чтобы получить такое представление 0x70b4c55a:

Я уже сделал это plaintext[1]= (rx_buffer[3]<<8)|rx_buffer[4]; Это результат, который у меня есть: 70b4

plaintext[1]= (rx_buffer[3]<<8)|(rx_buffer[4]<<8)|(rx_buffer[5]<<8)|rx_buffer[6]

Не работает. Пожалуйста, мне нужна помощь.

c
-1
nani92 27 Ноя 2016 в 21:25

2 ответа

Лучший ответ

Это один из способов сделать это:

plaintext[1] = (buffer_RX[3] << 24) |
               (buffer_RX[4] << 16) |
               (buffer_RX[5] << 8) | buffer_RX[6];
2
Simgate 27 Ноя 2016 в 18:31

Вы должны понимать, что каждый байт равен 8 битам, и поэтому 4 байта составляют 32 бита. Первый пример работает, потому что вы используете только 16 бит и два байта, для работы с 32 битами и четырьмя байтами вы должны сдвинуть каждый байт на 24, 16, 8 и 0 бит соответственно, чтобы поместить его в правильную позицию.

plaintext[1]= (rx_buffer[3] << 24 ) | 
              (rx_buffer[4] << 16) |
              (rx_buffer[5] << 8) |
               rx_buffer[6] ;
0
Clifford 27 Ноя 2016 в 18:41