我遇到以下问题:
我有uint8_t h_MSB
和uint16_t h_LSB
以及iwant
将它们合并为uint32_t
所以这是我的代码:
void parseHeader(MyPackage Header,uint32_t* timeStamp ){
(*timeStamp) = (Header->h_MSB <<16)| Header->h_LSB;
}
但它似乎不起作用;
我使用h_MSB = 10
和h_LSB= 10
时间戳我得到10分。
问题似乎在于,如果我将所有信息从7 bit
移走
h_MSB
已丢失,但由于时间戳为uint32_t
,该怎么办?
答案 0 :(得分:0)
问题在于h_MSB
为uint8_t
,并且移位操作在uint8_t
类型内执行(或可能在uint16_t
内执行,但这并不重要),所以你得到0
。在转移前将其投放到uint32_t
:
(*timeStamp) = (((uint32_t)Header->h_MSB) << 16) | Header->h_LSB;