我如何将uint8转换为表示字节的结构?

时间:2017-03-23 14:55:36

标签: c++ struct

我有一个结构,表示一个具有修复偏移量0b1111的字节。我已经定义了一个转换运算符来将SByte转换为unit8。

  1. 如何进行相反的转换(从uint8到SByte)?
  2. 首先用 uint8_t 或者联盟替换SByte的唯一解决方案是什么?
  3. struct SByte
    {
      uint8_t offset : 4;
      uint8_t bit4 : 1;
      uint8_t bit5 : 1;
      uint8_t bit6 : 1;
      uint8_t bit7 : 1;
    
      SByte():offset(15), bit4(0), bit5(0), bit6(0), bit7(0){}
      explicit operator int8_t() const
      {
        return static_cast<uint8_t>((bit7 << 7) | (bit6 << 6) | (bit5 << 5) | (bit4 << 4));
      }
    };
    int main()
    {
      auto lbyte = SByte();
      auto result = static_cast<int8_t>(lbyte);
      assert(result == 15); // 0b00001111
    }
    

1 个答案:

答案 0 :(得分:3)

  

如何进行相反的转换(从uint8到SByte)?

通过定义构造函数:

explicit SByte(uint8_t byte) {
    // extract individual bits from `byte`
}