我正在尝试用C ++找出一个串行程序。我正在发送一个char数组,其中包含几个uint8_t和几个uint16_t,我正在尝试拆分并发送。
char buf[3];
uint16_t var=1500;
这些之间有什么区别(如果有的话):
buf[0]= var & 0xFF; buf[1]= var >> 8;
和
buf[0]= (uint8_t)(var & 0xFF); buf[1]= var >> 8;
另一端期待16位整数与LSB优先,出于某种原因我不认为我得到了预期的串行写入。我知道有很多原因可能会发生,但我只是试图围绕这个概念。
答案 0 :(得分:1)
大多数串行协议都希望以big-endian顺序排列数据。在这种情况下,你应该*reinterpret_cast<short*>(buf) = htons(var)
。如果您确实需要little-endian,请使用htole16
中定义的string/endian.h
。