Java 相当于 struct.unpack ('d' 、 s.decode ('hex' ))[0]

标签 java python binaryfiles

我正在读取一个存储二进制文件的文件。 在 python 中我可以轻松解码文件

>>> s = '0000000000A0A240'
>>> s.decode('hex')
'\x00\x00\x00\x00\x00\xa0\xa2@'
>>> import struct
>>> struct.unpack('d', s.decode('hex'))[0]
2384.0

现在我想在 Java 中进行相同的解码,我们有类似的东西吗?

最佳答案

由于这些字节采用 Little-Endian 顺序,是 Intel 处理器上的 C 代码,因此使用 ByteBuffer 来帮助翻转字节:

String s = "0000000000A0A240";
double d = ByteBuffer.allocate(8)
                     .putLong(Long.parseUnsignedLong(s, 16))
                     .flip()
                     .order(ByteOrder.LITTLE_ENDIAN)
                     .getDouble();
System.out.println(d); // prints 2384.0

在这里,我使用 Long.parseUnsignedLong(s, 16) 作为对 8 个字节进行 decode('hex') 的快速方法。

<小时/>

如果数据已经是字节数组,请执行以下操作:

byte[] b = { 0x00, 0x00, 0x00, 0x00, 0x00, (byte) 0xA0, (byte) 0xA2, 0x40 };
double d = ByteBuffer.wrap(b)
                     .order(ByteOrder.LITTLE_ENDIAN)
                     .getDouble();
System.out.println(d); // prints 2384.0

上述导入内容为:

import java.nio.ByteBuffer;
import java.nio.ByteOrder;

关于Java 相当于 struct.unpack ('d' 、 s.decode ('hex' ))[0],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48957165/

相关文章:

java - android studio 生成Javadoc失败

java - Socket在同一台机器上的两个进程(起源于C和Java)之间进行通信

Java 是否支持其正则表达式库中的非 BMP Unicode 字符(即代码点 > 0xFFFF)?

python - 字段 'id' 需要一个数字,但得到了 ObjectId

C:读取二进制问题

c - C 中的 Pthread 加入?

java - 检查 FTP 服务器是否支持 MLSD

Python Pandas read_csv 仅从 CSV 文件中读取单行

python - 在Opencv Python中将RGB图像转换为YUV和YCbCr颜色空间图像

c++ - 序列化包含 std::string 的类