我正在尝试编写一个C ++应用程序,将64位字发送给Arduino。
我使用了here
描述的方法使用了termios我遇到的问题是byes首先到达arduino的最低字节。
即
如果使用(其中serialword是uint64_t)
write(fp,(const void*)&serialWord, 8);
最低有效字节首先到达arduino。
这不是我想要的行为,有没有办法让最重要的byes先到达?或者最好将串行字变为字节并逐字节发送?
由于
答案 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