3

1 バイトで、いくつかのビットを設定 |ビデオ | オーディオ | スピーカー | マイク | ヘッドフォン | ビット |1 | で導かれる 1 | 1 | 3 | 1 | 1
3 バイトを持っているため、最初の組み合わせを残して 7 つの組み合わせを持つことができるマイクを除くすべての 1 バイト。

#define Video    0x01
#define Audio    0x02
#define Speaker     0x04
#define MicType1  0x08 
#define MicType2  0x10
#define MicType3  0x20
#define MicType4 (0x08 | 0x10) 
#define MicType5 (0x08 | 0x20)
#define MicType6 (0x10 | 0x20)
#define MicType7 ((0x08 | 0x10) | 0x20)
#define HeadPhone 0x40
#define Led    0x80

今、私はビットを設定します

MySpecs[2] |= (1 << 0);
MySpecs[2] |= (1 << 2);

//マイクタイプ6を設定

MySpecs[2] |= (1 << 4);
MySpecs[2] |= (1 << 5);

私がこのように読むとき

 readCamSpecs()
    {
        if(data[0] &  Video)
            printf("device with Video\n");
        else
            printf("device with no Video\n");
        if(data[0] & Audio) 
            printf("device with Audio\n");
        else
            printf("device with no Audio\n");

        if(data[0] & Mictype7)
            printf("device with Mictype7\n");
        if(data[0] & Mictype6)
            printf("device with Mictype6\n");
    }

単一ビットで設定された値を見つけることができます。ただし、複数のビットで設定された値 (例: MicType5,6,7) はエラーになり、最初にチェックされたものを表示します。私は何を間違っていますか?

4

4 に答える 4

2

これを試して:

#define MicTypeMask (0x08 | 0x10 | 0x20)


if((data[0] & MicTypeMask) == Mictype7)
    printf("device with Mictype7\n");
if((data[0] & MicTypeMask) == Mictype6)
    printf("device with Mictype6\n");

if((data[0] & MicTypeMask) == 0)
    printf("device without Mic\n");
于 2012-08-01T07:38:33.780 に答える
2

結果&がゼロ以外になるため、ビットが 1 つしか設定されていない場合でも、チェックは成功します。

if ( data[0] & Mictype7 == MicType7 )代わりに試してください。

于 2012-08-01T07:18:25.267 に答える
0

data[0] & Mictype7結果が 0 でない場合、つまり 3 つのビットのいずれかが設定されている場合、true と評価されます。以下は、MicType7 に正確に一致します。 if(data[0] & Mictype7 == Mictype7)

これを試して、概念を確認してください。 if (Mictype7 & Mictype6) printf("Oh what is it?!!");

于 2012-08-01T07:18:19.947 に答える
0

他の部分を削除することをお勧めします。不必要にエラーメッセージを出力するためです。

 readCamSpecs()
    {            
        if(!data[0])
            printf("Print your error message stating nothing is connected. \n");

        if(data[0] &  Video)
            printf("device with Video\n");

        if(data[0] & Audio) 
            printf("device with Audio\n");

        if(data[0] & Mictype7)
            printf("device with Mictype7\n");

        if(data[0] & Mictype6)
            printf("device with Mictype6\n");    
    }
于 2012-08-01T07:30:20.360 に答える