java - 读取 5 个字节并存储为 long

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

最佳答案

这是因为 msb 的类型是字节,当你将其左移 32 位时,你会得到一个零(字节只是 8 位)。将 msb 类型更改为 long 就可以了。

关于java - 读取 5 个字节并存储为 long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19476664/

相关文章:

java - 我可以在同一个服务中使用两个存储库吗?

java - Cobertura,压制线永远不应该出现

templates - 是否可以在 Julia 中声明对任何结构的一般引用?

c - 将枚举转换为 c 中的类型的宏

c# - 字节集合基于类似于 ByteBuffer from java

Java:将 ArrayList<Byte> 转换为 ByteBuffer

java - 我应该在 onResume() 或 onCreate() 中获取类的实例吗

java - JPanel 不通过定时器重绘

c# - 从类创建数据表(不是实例列表)

android - Honeycomb 以下的 Android 不支持 Bytebuffer array() 方法