2017-03-23 1 views
0

私は固定オフセット0b1111を持つバイトを表す構造体を持っています。 SByteをunit8にキャストする変換演算子を定義しました。uint8をバイトを表す構造体にキャストする方法はありますか?

  1. (uint8からSByteへの)逆の変換はどうすればできますか?
  2. SByteをuint8_t、またはユニオンと置き換える唯一のソリューションはありますか?
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 
} 
+2

'uint8_t'を受け取り、_XYのproblem_のパワーはすごいです' SByte' – Amadeus

答えて

3

にはどうすれば(UINT8からSByteに)逆変換を持つことができますか?コンストラクタを定義することにより

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

を構築するコンストラクタを作成します。ありがとう – wxkin

関連する問題