与Arduino串行通信的字节顺序

时间:2013-07-04 03:56:29

标签: c++ serial-port arduino

我正在尝试编写一个C ++应用程序,将64位字发送给Arduino。

我使用了here

描述的方法使用了termios

我遇到的问题是byes首先到达arduino的最低字节。

如果使用(其中serialword是uint64_t)

write(fp,(const void*)&serialWord, 8); 

最低有效字节首先到达arduino。

这不是我想要的行为,有没有办法让最重要的byes先到达?或者最好将串行字变为字节并逐字节发送?

由于

1 个答案:

答案 0 :(得分:3)

由于所涉及的CPU的字节顺序不同,因此您需要在发送之前或接收之后颠倒字节顺序。在这种情况下,我建议在发送之前将它们反转,以便节省Arduino上的CPU周期。使用C ++标准库的最简单方法是使用std::reverse,如以下示例所示

#include <cstdint>  // uint64_t (example only)
#include <iostream> // cout (example only)
#include <algorithm>  // std::reverse

int main()
{
    uint64_t value = 0x1122334455667788;

    std::cout << "Before: " << std::hex << value << std::endl;

    // swap the bytes
    std::reverse(
        reinterpret_cast<char*>(&value),
        reinterpret_cast<char*>(&value) + sizeof(value));

    std::cout << "After: " << std::hex << value << std::endl;
}

这输出以下内容:

  

之前:1122334455667788
  之后:8877665544332211