OpenBCIと呼ばれる新しい IoT プロジェクトに興味があります。これは基本的に、脳波やその他のバイオデータを読み取って処理するためのオープン ソースの EEG です。彼らのドキュメントでは、(RFDuino を介して) 無線で送信されたデータは 24 ビット データを送信すると主張しています。24 ビット値を 32 ビット符号付き整数に変換するには、次の Java フレンドリーな処理コードを提案します。
int interpret24bitAsInt32(byte[] byteArray) {
int newInt = (
((0xFF & byteArray[0]) << 16) |
((0xFF & byteArray[1]) << 8) |
(0xFF & byteArray[2])
);
if ((newInt & 0x00800000) > 0) {
newInt |= 0xFF000000;
} else {
newInt &= 0x00FFFFFF;
}
return newInt;
}
ここで何が起こっているのかを正確に理解しようとしていると思います。コードの最初の宣伝文を見てみましょう:
int newInt = (
((0xFF & byteArray[0]) << 16) |
((0xFF & byteArray[1]) << 8) |
(0xFF & byteArray[2])
);
- 入力に 3 バイトがあると仮定しても安全なのはなぜですか?
0xFF
値の重要性は何ですか?- 左ビットシフト (
<<
) の目的は何ですか?
2 番目のセグメントも少し謎です。
if ((newInt & 0x00800000) > 0) {
newInt |= 0xFF000000;
} else {
newInt &= 0x00FFFFFF;
}
- なぜ
newInt & 0x00800000
ですか?の意味は何0x00800000
ですか? if-else
上記の操作の肯定的な結果と非否定的な結果に基づいているのはなぜですか?0xFF000000
との意味は何0x00FFFFFF
ですか?
この関数には、もっとよく理解したいハンドウェーブとマジックがたくさんあると思います!