串行通讯的字节顺序Arduino的(Byte Order of Serial communicati

2019-10-18 07:58发布

我试图写一个C ++应用程序到64位字发送到一个Arduino。

我用使用所描述的方法的termios 这里

我遇到的问题是轮空的在至少显著字节Arduino的第一个到达。

如果使用(其中serialword是uint64_t中)

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

最低显著字节在Arduino的到达第一。

这是不是我被通缉的行为,有没有办法得到最显著轮空第一个到达终点? 或者是最好的制动serialword成字节,按字节发送字节?

谢谢

Answer 1:

由于涉及到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



文章来源: Byte Order of Serial communication to Arduino