0

2バイトあり、さまざまな組み合わせを取得するためにさまざまなビットを設定しています。たとえば、バイト1ビット7とバイト2ビット1、ビット2は、組み合わせデバイスを準備します。今、私はマスクを作成しました

#define C1_device_ready   (0x80 | 0x100 | 0x200)

次に、データを読み取って比較してみます。1バイトで実行できます(data [0]&mask == mask)。しかし、data[0]とdata[1]の2バイトがあるC1_device_readyマスクに対してどのように計算できますか。簡単に可能ですか、それとも1バイトでのみマスキングを行う必要がありますか。:: add::dataはunsignedchardata [2]

4

4 に答える 4

5

dataの配列である場合unsigned char、テストできます

if ((data[0] & mask) == (mask & 0xFF) && (data[1] & mask) == ((mask >> 8) & 0xFF))

または2つdata[i]を組み合わせて確認してください

if (((data[0] | (data[1] << 8)) & mask) == mask)
于 2012-08-10T11:59:16.490 に答える
2

使用する

if (((data[0] | (data[1] << 8)) & mask) == mask) {
    // do something
}
于 2012-08-10T12:01:29.337 に答える
2
((data[0] | (data[1]<<8)) & mask) == mask

動作するはずです。ものを次のようにキャストする必要があるかもしれませんunsigned int

于 2012-08-10T12:01:49.230 に答える
0

試す:

if ((*(short *)data) & C1_device_ready)
于 2012-08-10T12:10:17.237 に答える