c ++ анализирует два байта до int - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть два байта, считанные с датчика через I2C, они хранятся как unsigned char.Я знаю, какой из них является самым старшим, а какой - самым младшим.

unsigned char yawMSB;
unsigned char yawLSB;

Как бы мне было преобразовать эти два байта данных в один int?

Я правильно реализовал это в C #, используя

BitConverter.ToInt16(new byte[] { yawLSB, yawMSB }, 0)

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

В 16-разрядном целом числе старшие 8 битов представляют собой старший значащий байт, а младшие 8 битов являются младший значащий байт.

Чтобы старший бит занимал старшие биты, вам необходимо сместить его значение вверх (на 8 бит), что выполняется с помощью побитового оператора влево <<.

Затем, чтобы получить младший значащий байт, вы просто добавляете младшие 8 бит, используя поразрядно или |.

Вместе это будет что-то вроде yawMSB << 8 | yawLSB.

0 голосов
/ 13 ноября 2018

Я знаю, какой байт является самым старшим, а какой - младшим.

  • MSB означает Мост Значимый байт.
  • LSB означает Наименее Существенный байт.

Как мне преобразовать эти два байта данных в один массив?

Затем вы можете построить число с плавающей точкой:

const float yaw = yawMSB << 8 + yawLSB;

На самом деле значение yawMSB << 8 + yawLSB, вероятно, находится в масштабе, заданном вашей реализацией. Если это правда, и если это линейная шкала от 0 до MAX_YAW, вы должны определить свое значение как:

const float yaw = float(yawMSB << 8 + yawLSB) / MAX_YAW; // gives yaw in [0.f, 1.f].
...