Конвертировать int16 в байтовый массив - PullRequest
1 голос
/ 10 июля 2011

Я действительно новичок в C, и поэтому немного сбит с толку.

Я пытаюсь преобразовать int16 в массив byte [].

У меня есть int16, как -200и я хочу преобразовать его в массив byte [2], как в следующем примере.

Velocity = -200 = hex FF38 = [hex FF] [hex 38] = [255] [56]

Я беру значения и передаю их в последовательный порт, как показано ниже, но мне нужно передатьint16, и есть функция, конвертирующая его в байт [] для меня.

Serial.print(255,BYTE);
Serial.print(56,BYTE);

Я нашел следующий код, но не смог заставить его работать

Serial.print((velocity & 0xff00) >> 8, BYTE);
Serial.print(velocity & 0xff, BYTE);

Есть предложения ??Любая помощь будет оценена.

1 Ответ

3 голосов
/ 10 июля 2011

Ваш подход выглядит хорошо, но, может быть, вы запутались из-за проблемы endianness ?

Последовательные протоколы также могут рассматриваться как либо с прямым порядком байтов, либо с прямым порядком байтов на уровне битов и / или байтов (которые могут отличаться). Многие последовательные интерфейсы, такие как вездесущий USB, имеют младший порядок на уровне битов. Физические стандарты, такие как RS-232, RS-422 и RS-485, также обычно используются с UART, которые сначала отправляют младший значащий бит ...

Ваш код отправляет самый старший байт первым ("big-endian").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...