我在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值。我尝试对这些值进行位掩码并尝试使用不同类型进行读取,但这也不起作用。
答案 0 :(得分:1)
那是因为msb的类型是字节,当你向左移动32位时,你得到一个零(字节只有8位)。将msb类型更改为long,您应该没问题。
答案 1 :(得分:1)
试试这个
long number = 0;
number = number | (((long) msb << 32));
number = number | ((lsb) & 0xFFFFFFFF);
System.out.println(number);
记住一个字节只有8位长。所以当你离开时,字节32次,1丢失。所以你需要将msb转换为long。然后做bitmasking。