0

我遇到以下问题:

我有一个uint8_t h_MSBanduint16_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从 ist lost 转移到所有信息 之外h_MSB,但由于时间戳是一个,怎么可能呢uint32_t

4

1 回答 1

0

问题是,h_MSB移位uint8_t操作是在uint8_t类型内执行的(或者可能在 内uint16_t,但没关系),所以你得到0. 转换uint32_t前将其转换为:

(*timeStamp) = (((uint32_t)Header->h_MSB) << 16) | Header->h_LSB;
于 2014-06-05T17:22:44.553 回答