我对一个名为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
何在? - 左移 (
<<
) 的目的是什么?
第二段也有点神秘:
if ((newInt & 0x00800000) > 0) {
newInt |= 0xFF000000;
} else {
newInt &= 0x00FFFFFF;
}
- 为什么
newInt & 0x00800000
?有什么意义0x00800000
? - 为什么
if-else
基于上述操作的正负结果? 0xFF000000
和的意义是0x00FFFFFF
什么?
我想我想更好地理解这个功能有很多挥手和魔法!