【问题标题】:Convert int16 to byte array将 int16 转换为字节数组
【发布时间】:2011-07-09 22:40:28
【问题描述】:

我真的是 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);

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

【问题讨论】:

  • 在你的上一个例子中什么没用?
  • “无法正常工作”是什么意思?您是否尝试过使用 printf 或任何东西来查看 (velocity & 0xFF00)>>8 的结果是什么?
  • Serial.print ... hmmm ... 你确定你的代码是C,你的编译器是C的吗? print 是结构类型对象的函数指针部分吗?无论如何......为什么它不起作用?编译器消息是什么?发生什么或不发生什么? 帮助我们帮助您并确保语言
  • @pmg 好点,在我看来像 C++

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


【解决方案1】:

您的方法看起来不错,但也许您被endianness 问题绊倒了?

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

您的代码首先发送最高有效字节(“big-endian”)。

【讨论】:

    猜你喜欢
    • 2016-11-14
    • 1970-01-01
    • 2018-02-20
    • 2017-07-21
    • 2011-10-12
    • 2014-08-08
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    相关资源
    最近更新 更多