gpt4 book ai didi

java - 如何将 16 位字符数组转换为 8 位字符数组并使用 JNA 发送到 C 代码?

转载 作者:行者123 更新时间:2023-11-30 15:27:13 25 4
gpt4 key购买 nike

我的c代码中有一个函数,其定义如下:

void myfunct(double *xx, double *yy, double *si, double *ded, double *limit, double *al, double *bl, double *cl, int ndat, const char *path, int plenght, int error,int pgamodell,int converter, double backnoise);

当我在 gcc 中执行这个 c 程序时,它会执行并给出所需的输出。 (工作正常!)

现在,我的任务是在 java 中使用这个 c 代码,因此我使用 JNA。但我对该函数的路径参数有问题。在我的 java 端,我通过以下方式发送此参数:

String p = "E:/Development/dir/";
char[] path = p.toCharArray();

// and sending this path in the function call

但是在c程序上,我调试了一下,发现它获取的路径只有一个字符,即“path=E”。

我猜原因是在java中char数组是16位,但在c中它是8位。

请帮助我解决这个问题,因为我是 JNA 的新手,提前感谢您的宝贵时间。

最佳答案

如果您的 native 签名需要 const char*,那么当您传递 Java 字符串时 JNA 将自动工作。无需转换。

在内部,JNA 将创建一个临时缓冲区(在调用期间)并将 Java 字符串编码为 native NUL 终止字节数组(默认为 utf8 编码,但可以通过设置系统属性 进行修改jna.encoding)。

关于java - 如何将 16 位字符数组转换为 8 位字符数组并使用 JNA 发送到 C 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27132382/

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