Java中的24位到32位转换
我对一个名为IoT的新项目感兴趣,它基本上是一个开源EEG,用于读取和处理脑电波和其他生物数据。在他们的研究中,他们声称通过无线传输的数据(通过RFDuino)发送24位数据。要将24位值转换为32位有符号整数,他们建议使用以下Java友好代码:Java中的24位到32位转换,java,processing,bitwise-operators,bit-shift,signed-integer,Java,Processing,Bitwise Operators,Bit Shift,Signed Integer,我对一个名为IoT的新项目感兴趣,它基本上是一个开源EEG,用于读取和处理脑电波和其他生物数据。在他们的研究中,他们声称通过无线传输的数据(通过RFDuino)发送24位数据。要将24位值转换为32位有符号整数,他们建议使用以下Java友好代码: 为什么newInt&0x00800000?0x00800000的意义是什么 为什么if-else基于上述操作的正结果与非负结果 0xFF000000和0x00FFFFFF的意义是什么 我想这个函数中有很多手工操作和魔法,我希望能更好地理解 为什么假
- 为什么
?newInt&0x00800000
的意义是什么0x00800000
- 为什么
基于上述操作的正结果与非负结果if-else
和0xFF000000
的意义是什么0x00FFFFFF
左位移位的目的是什么(最后一部分是一种模糊的符号扩展方式,else分支是一个不可操作的分支。更明显的是
newInt=(newInt>8
Awesome,Awesome answer@James Buck(+1)-谢谢!我只是好奇,如果我是用Java实现的,并且需要一个单元测试来确认这是否有效,我在哪里可以找到24位有符号整数及其相应的32位有符号值,以验证测试结果?:-)再次感谢!@smeeb您可以选择任意24位随机数,将其放入2的补码二进制到十进制转换器中,例如。然后您可以将相同的二进制数放入3字节数组中,上面的代码应将其转换为与计算器值完全相同的32位整数。此代码将确保任何24位值都具有val值ue在转换为32位格式时保留。
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])
);
if ((newInt & 0x00800000) > 0) {
newInt |= 0xFF000000;
} else {
newInt &= 0x00FFFFFF;
}