我是一名实习生,在我工作的地方继承了一个测试程序的问题。在稍微搜索了一下之后,我可以找到一个与我完全相同的问题的人。在这里四处询问之后,我发现发布此消息的人实际上仍然在这里工作,我也在这方面得到他的帮助,但我认为他对问题的解释比我更严谨。
这里是为那些不想阅读那些垃圾内容的人准备的。我们有一个在客户端运行的 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/