我又在java中的类型转换上苦苦挣扎...我需要从ByteBuffer
读取一个5字节的值并将该值存储在long
中。
因此我这样做了:
byte msb = b.get();
int lsb = b.getInt();
System.out.println(msb + " " + lsb);
long number = ((msb << 32)) | (((long) lsb) & 0xFFFFFFFF);
System.out.println(number);
日志给出了以下结果:
1 376263385
376263385
所以 msb 和 lsb 可以正确读取,但是如果我将它们连接在一起,我只能得到其中的 lsb 值。我尝试对值进行位掩码并尝试读取不同的类型,但这也不起作用。
最佳答案
这是因为 msb 的类型是字节,当你将其左移 32 位时,你会得到一个零(字节只是 8 位)。将 msb 类型更改为 long 就可以了。
关于java - 读取 5 个字节并存储为 long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19476664/