TinyOS:将uint16_t和uint8_t转换为uint32_t

时间:2014-06-02 23:00:39

标签: tinyos type-conversion

我遇到以下问题:

我有uint8_t h_MSBuint16_t h_LSB以及iwant将它们合并为uint32_t

所以这是我的代码:

void  parseHeader(MyPackage Header,uint32_t* timeStamp ){
(*timeStamp) = (Header->h_MSB <<16)| Header->h_LSB;
} 

但它似乎不起作用;

我使用h_MSB = 10h_LSB= 10

进行了尝试

时间戳我得到10分。

问题似乎在于,如果我将所有信息从7 bit移走 h_MSB已丢失,但由于时间戳为uint32_t,该怎么办?

1 个答案:

答案 0 :(得分:0)

问题在于h_MSBuint8_t,并且移位操作在uint8_t类型内执行(或可能在uint16_t内执行,但这并不重要),所以你得到0。在转移前将其投放到uint32_t

(*timeStamp) = (((uint32_t)Header->h_MSB) << 16) | Header->h_LSB;