我试图写一个C ++应用程序到64位字发送到一个Arduino。
我用使用所描述的方法的termios 这里
我遇到的问题是轮空的在至少显著字节Arduino的第一个到达。
即
如果使用(其中serialword是uint64_t中)
write(fp,(const void*)&serialWord, 8);
最低显著字节在Arduino的到达第一。
这是不是我被通缉的行为,有没有办法得到最显著轮空第一个到达终点? 或者是最好的制动serialword成字节,按字节发送字节?
谢谢
由于涉及到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