无符号int转换C ++

时间:2016-10-05 21:39:39

标签: c++

我正在尝试用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优先,出于某种原因我不认为我得到了预期的串行写入。我知道有很多原因可能会发生,但我只是试图围绕这个概念。

1 个答案:

答案 0 :(得分:1)

大多数串行协议都希望以big-endian顺序排列数据。在这种情况下,你应该*reinterpret_cast<short*>(buf) = htons(var)。如果您确实需要little-endian,请使用htole16中定义的string/endian.h