java - 将 Double 从 Delphi/Pascal 转换为 Java

标签 java linux windows delphi double

我需要使用 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/

相关文章:

java - 一些SerialCG日志的含义

linux - 对添加到内核的系统调用的 undefined reference

windows - 我可以使用 Golang 获取 Active Directory 环境的内部域名吗?

Python input() 在 plink 之后无响应

.net - 迷你转储对 .NET 中的调试有用吗

java - 通过 JDBC 更新用户密码不起作用

java - 通过 jpa 将两个表连接到一个 java 对象中

java - 如何在 Spring MVC 中添加包含 PathVariable 的重定向 url

linux - sudo 环境变量如何在 linux 中工作?

linux - 为什么我必须为子进程设置 `wait()`?