Java/Ada Big Endian 到 Linux Little Endian 问题

标签 java linux unix endianness ada

我是一名实习生,在我工作的地方继承了一个测试程序的问题。在稍微搜索了一下之后,我可以找到一个与我完全相同的问题的人。在这里四处询问之后,我发现发布此消息的人实际上仍然在这里工作,我也在这方面得到他的帮助,但我认为他对问题的解释比我更严谨。

on this forum

这里是为那些不想阅读那些垃圾内容的人准备的。我们有一个在客户端运行的 GUI,它可以远程调用在 SPARC Unix 机器上运行的用 Ada 编写的测试应用程序。当大楼里的每个人都使用 Unix 机器做所有事情时,测试应用程序和图形用户界面工作得很好,但最近每个人都得到了更新更快的 linux x86 机器。

由于测试应用程序和 GUI 之间的 Big/Little Endian 不兼容,获得升级的任何人都无法运行测试应用程序。

现在,我的工作是弄清楚如何修复它。现在,我知道这里将对应用程序进行一次大的重写,我可能不得不重新定义 GUI 和测试应用程序如何相互通信,但如果不完全反汇编程序,我该如何做到这一点?

我自己想出的一些选项如下: Java RMI XML/远程过程调用 肥皂 数据烘焙?

请记住,我完全是网络编程的菜鸟,尽管这些“解决方案”对我来说可能看起来有效,但我可能完全不对。请帮忙!

最佳答案

您无需重写任何内容。只要确保你在两边都使用网络顺序(big endian,你自然表达数字的方式)。 x86 使用 little endian,因此您必须查看任何在 x86 上失败的应用程序的源代码。

然后,调用 htonl/htons/ntohl/ntohs(参见 man 3 htonl)或类似函数,将您发送/接收的每个数字转换为发送/接收代码部分的正确编码接收数据。 Java 始终使用网络顺序,因此您不必担心 native Java 代码。

关于Java/Ada Big Endian 到 Linux Little Endian 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1003447/

相关文章:

linux - 使用 PAM 在 Linux 上验证用户名

linux - 在 ssh 命令中使用远程服务器的环境变量

macos - 远程端口转发 SSH 被视为从 127.0.0.1 访问的无效用户

c - 父级从管道中读取 - 什么情况

java - 如何使用 BigDecimal.ROUND_HALF_UP 将 0.745 舍入到 0.75?

java - 最大有效时间由 4 位数字组成

linux - 使用 sigprocmask 设置掩码仅取决于调用位置

java - 为 JPA 存储库编写 junit

java - 如何使用 JAVA PKCS11 IAIK 在 SOFTHSM2 中进行 key 包装期间切换到 CKM_AES_KEY_WRAP_PAD

Python - 在给定目录中非递归地创建文件列表