将int16转换为字节数组

时间:2011-07-09 22:40:29

标签: c++ serial-port serial-communication

我是C的新手,所以有点困惑。

我正在尝试将int16转换为byte []数组。

我有一个像-200这样的int16,我想把它转换成byte [2]数组,就像下面的例子一样。

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

我正在接受这些值并将它们传递到串口,如下所示,但是我需要传递int16,并且有一个函数将它转换为byte []。

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

我找到了以下代码,但无法使其正常工作

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

有什么建议吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

你的方法看起来很好,但也许你被endianness问题绊倒了?

  

串行协议也可以在位和/或字节级别(可能不同)被视为小端或大端。许多串行接口,例如无处不在的USB,在位级别上都是小端的。 RS-232,RS-422和RS-485等物理标准通常也用于首先发送最低有效位的UART ......

您的代码首先发送最重要的字节(“big-endian”)。