gpt4 book ai didi

java - 将 String 中的 byte[] 从 Java 发送到 C 程序

转载 作者:行者123 更新时间:2023-12-03 13:44:46 25 4
gpt4 key购买 nike

我需要将我的 Java 信息​​放入一个字符串中,因此我使用了 String(byte[] arrB) 构造函数。现在,此信息以 char* 类型发送到 C 程序。现在我需要取回原始字节,因为根据我的理解,它们是在创建 Java String 的过程中编码的。

我怎样才能在 C 程序中做到这一点?

所以,在 C 端我有这些字节:

7e 53 e9 94 d4 46 f5 7c 66 cf 85 34 18 5a ff 6 2d a3 89 48 d2 e4 46 b8 6b 43 ec 64 3a 67 f9 2 6d 12 ac e7 0 c4 99 52 68 76 76 77 12 2 de 7d 5b e7 4e 5 6 73 f4 fc 91 54 12 71 64 7a 25 3d

它们在 char* 中,但 Java 作为字符串和字符串是:

7E 53 EF BF BD EF BF BD 46 EF BF BD 7C 66 CF 85 34 18 5A EF BF BD 06 2D EF BF BD EF BF BD 48 EF BF BD EF BF BD 46 EF BF BD 6B 43 EF高炉 BD 64 3A 67 EF BF BD 02 6D 12 EF BF BD EF BF BD

如您所见,有很多相似之处...

最佳答案

由于您没有提供有关 Java 和 C 之间传输的详细信息,因此我无法为您提供完整的答复,只是假设。 (请提供代码)

第一点:正如 Scary Wombat 所说,如果您想将数据发送到 C,请不要使用编码,只需发送字节即可。

假设一:编码不一样

当您将字节编码为字符串时,您将使用默认编码。正如 javadoc 所说:

Constructs a new {@code String} by decoding the specified array ofbytes using the platform's default charset

public String(byte bytes[])

如果需要将String转成char*,定义两边的编码:

String.getBytes("UTF-8)". 

如果你的 java 和 c 部分使用不同的编码,你会得到不同的结果。

假设 2:添加了空字节如果大小不同(1 个字节),则可能是 char* 末尾的空字节。

假设 3:你读取了一些不在你的数组中的字符

你是如何初始化你的 char* 的?你有 malloc 吗?一个固定大小的缓冲区?也许这是错误的,你读取了另一个数据,属于另一个缓冲区/变量/....

假设 3':错过初始化 char*,您只是读取初始缓冲区值。

不要忘记为您的结构分配内存: Two example to how to allocated struct memory and when

关于java - 将 String 中的 byte[] 从 Java 发送到 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27559066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com