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

标签 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 程序时,它会执行并给出所需的输出。 (工作正常!)

现在,我的任务是在 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/

相关文章:

python - 在 Python 中随机获取重复值数组的 3 个最小值

c - 如何将数组中的5个数字写入二进制

java - 无法处理二维对象数组

java - JDK 对实体扩展的限制

c - 如果第一个参数仅指示枚举值,如何找出参数的数量(使用变量参数)?

python - 使用python在树莓派中进行I2C通信

java - JList - 以红色突出显示特定单元格

Java,MalformedChunkCodingException

C 平方时答案错误

ios - Helvetica Neue Light,iOS