2
    unsigned char Mid;

if( (data[2]) == 0x9A){
    Mid = data[5];

    if( (Mid == 1) || (Mid == 2) || (Mid == 3) )
        return(Mid);

上記のコードは次のようになります。

警告: データ型の範囲が限られているため、比較は常に false

思った通りのエラー。

入力すればOK

if( (unsigned char)data[2] == 0x9A){

また

if( (data[2]&0xFF) == 0x9A){

1枚目はわかるけど2枚目はどうなるの?

でマスキングする効果は0xFF

4

1 に答える 1

4
  • 値をunsignedcharにキャストするときは、明示的な型変換を行っています。

  • 値を。でマスクすると0xFF暗黙的な型変換が行われます。

符号付き文字data[2]0xFFビット単位のAND演算子のオペランドがあります。オペランドの1つ(0xFF)はsigned char内に収まらないため、両方のオペランドは暗黙的にunsigned型に変換されます。

于 2012-09-28T08:39:09.983 に答える