Java 如何使用JNA将16位字符数组转换为8位字符数组并发送到c代码?
我的c代码中有一个函数,其定义如下:Java 如何使用JNA将16位字符数组转换为8位字符数组并发送到c代码?,java,c,arrays,types,jna,Java,C,Arrays,Types,Jna,我的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程序时,它会
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中的字符数组是16位的,而c中是8位的
请帮助我解决这个问题,因为我是JNA的新手,提前感谢您的时间 如果您的本机签名需要
const char*
,那么当您传递Java字符串时,JNA将自动工作。不需要转换
在内部,JNA将创建一个临时缓冲区(在调用期间),并将Java字符串编码为以NUL结尾的本机字节数组(默认为utf8编码,但可以通过设置系统属性JNA.encoding
)进行修改)。此代码片段有帮助吗?