0

我再次在 java 中的类型转换中苦苦挣扎......我需要从 a 读取一个 5 字节的值ByteBuffer并将该值存储在 a 中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 值。我试图对这些值进行位掩码并尝试读取不同的类型,但这也不起作用。

4

2 回答 2

1

这是因为 msb 的类型是字节,当你将它向左移动 32 位时,你得到一个零(字节只有 8 位)。将 msb 类型更改为 long,您应该没问题。

于 2013-10-20T11:13:13.420 回答
1

试试这个

long number = 0;
    number = number | (((long) msb << 32));
    number = number | ((lsb) & 0xFFFFFFFF);
    System.out.println(number);

请记住,一个字节只有 8 位长。因此,当您将字节左移 32 次时,1 会丢失。因此,您需要将 msb 转换为 long。然后进行位掩码。

于 2013-10-20T11:19:23.130 回答