1

1バイトのデータに格納されている2つの異なる値を処理する正しい方法は何ですか。それぞれが独自のデータを含む2つのニブルを含むバイトがあります。上のニブルと下のニブルをそれぞれの変数に読み込みたいと思います。

11110000=上位4ビットスロットル、に読み込まれ$throttle、0〜15の値である必要があります。 00001111=下位4ビットブレーキ、に読み込まれ$brake、0〜15の値である必要があります。

ドライバーはスロットルとブレーキを同時にかけることができるので、のような値が得られる可能性があることを忘れない11000111でください。私自身、上位4ビットの解決策を考え出しました。これは、下位4ビットを>>(ビットシフト右)演算子で4回押し出すのと同じくらい簡単です。$Throttle = $ThrBrk >> 4、しかし、下位4ビットの1つの動きでそれを行うことができないので、私のソースコードではちょっと悪いように見えます。

4

2 に答える 2

6

両方に演算子を使用ANDし、上のニブルを4ビット右にシフトします。

$brake = $value & 0x0F;
$throttle = ($value & 0xF0) >> 4;
于 2011-05-06T10:21:47.940 に答える
2

&演算子を確認してください。これはビット単位のANDです。最初の(最下位ビット)を取得するには、次のようにします。

$lsb = $bits & 1;

したがって、「ニブル」全体を取得するには、次のようにします。

$break = $bits & 15;
于 2011-05-06T10:23:15.303 に答える