我的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/