【问题标题】:CPP to Java conversionCPP 到 Java 的转换
【发布时间】:2009-08-17 15:20:41
【问题描述】:

这是我的场景。我有一个用 C++ 编写的应用程序,但不是完整的源代码,但它的“肉”就在那里。我也有这个应用程序的编译 exe。它与我们网络上某处的服务器通信。我正在尝试在 java 中复制 C++ 代码,但是它使用 dwords 和内存引用、sizeof 等,所有在 java 中不存在的东西,因为它管理自己的内存。它构建这个庞大的复杂消息,然后通过网络触发它。所以我基本上是在嗅探流量并检查数据包并尝试对它发送的数据进行硬编码,以查看是否可以通过这种方式从服务器获得响应。但是我似乎无法完美地复制该消息。其中一些,例如它发送的许可证代码是“clear hex”,即转换为 ascii 的十六进制,其中 - 因为数据的某些其他部分不是“clear hex”,例如“aa”,它不翻译成 ascii(或者至少是一个通用字符集??如果这是否有意义,我不确定)。

理想情况下,我不想这样做,但这是一个垫脚石,看看是否可以让服务器响应我。其中一项功能是让应用程序自行注册,这就是我要复制的功能。

我上面的一些假设可能是错误的,所以我提前道歉。感谢您的宝贵时间。

【问题讨论】:

    标签: java c++ hex packet


    【解决方案1】:

    在 Java 中,所有“字符”数据都被编码为 Unicode(而不是 ASCII)。因此,当您与外部事物交谈时,您需要将内部字符串映射到外部世界。有几种方法可以做到:

    1. 使用ByteArrayOutputStream。这基本上是一个不断增长的字节缓冲区,您可以将其附加到其中。这允许您使用字节构建消息。

    2. 使用getBytes(encoding),其中编码是对方理解的编码。在您的情况下,文本部分将是“ASCII”。

    在您的情况下,您可能需要两者。创建一个字节缓冲区,然后将字符串和字节附加到其中,然后通过套接字 API 发送最终结果 (getByteArray())。

    【讨论】:

    • 嘿,谢谢,这似乎运作良好。或者,当我在等待答案时,我能够创建一个字符数组,您可以使用 0x?? 表示字符?在哪里 ??可以是任何十六进制值,因此我可以在这里使用“aa”并让它代表我试图复制的值。但是,从可读/编程方法来看,您的答案显然更合适。非常感谢。
    • 在 Java 中 "char" != "byte" (与 C 中不同)。您可以创建一个 byte[] 数组,但随后您必须处理当前位置等问题。很多麻烦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多