读取5个字节并存储到long

时间:2013-10-20 11:08:57

标签: java types bytebuffer

我在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值。我尝试对这些值进行位掩码并尝试使用不同类型进行读取,但这也不起作用。

2 个答案:

答案 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。