我需要使用 Delphi/Pascal 语言读取在 Windows SO 中创建的二进制文件。我知道这个文件是固定长度的,前 8 个字节是双字节。我将此文件从 Windows SO 复制到 Ubuntu SO。当我尝试使用 Java 语言在 Ubunto SO 内部读取此文件时,我看到: 双 = 84000
[0, 0, 0, 0, 0, -126, -12, 64]
所以我在 Java 中创建相同的 double (84000),运行 Ubuntu SO:
Double yourDouble = (double) 84000;
byte[] bytes = new byte[8];
java.nio.ByteBuffer.wrap(bytes).putDouble(yourDouble);
查看字节数组我看到:
[64, -12, -126, 0, 0, 0, 0, 0]
很明显,字节数组是倒置的。有没有办法读取这个文件?或者我需要反转字节数组?
编辑: 是不是因为Big Endian和Little Endian倒置了?
最佳答案
Java,至少在公开场合,以大端字节顺序表示数据,即使在内部它可能出于效率原因使用不同的字节。至少在 Windows 上,Delphi 是小端。所以你需要颠倒字节顺序。
对于整型数据类型,您也会遇到同样的问题。以及任何 16 位或 32 位字符数据。
关于java - 将 Double 从 Delphi/Pascal 转换为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25087637/