【问题标题】:TinyOS: converting uint16_t and uint8_t into uint32_tTinyOS:将 uint16_t 和 uint8_t 转换为 uint32_t
【发布时间】:2014-07-23 03:59:50
【问题描述】:

我遇到以下问题:

我有一个 uint8_t h_MSBuint16_t h_LSBiwant 将它们组合成一个 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 怎么可能呢?

【问题讨论】:

    标签: tinyos type-conversion


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 2018-05-15
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      相关资源
      最近更新 更多