CPP到Java的转换

时间:2009-08-17 15:20:42

标签: java c++ hex packet

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

理想情况下,我不想这样做,但它是一个踩脚石,看看是否可以让服务器回应我。其中一个功能是应用程序注册自己,这就是我试图复制的功能。

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

1 个答案:

答案 0 :(得分:2)

在Java中,所有“字符”数据都编码为Unicode(而不是ASCII)。所以当你谈到外面的东西时,你需要将内部字符串映射到外部世界。有几种方法可以做到:

  1. 使用ByteArrayOutputStream。这基本上是一个可以追加的字节缓冲区。这允许您使用字节构建消息。

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

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