【发布时间】:2016-09-22 06:35:30
【问题描述】:
所以我需要使用 JNI 从 java 调用 C 函数。在传入不同的数据类型(创建本机变量、头文件、共享库等)时,我已经能够成功地做到这一点,但无法让它与字节数组一起使用。这是我的 C 函数:
#include <stdio.h>
void encrypt(int size, unsigned char *buffer);
void decrypt(int size, unsigned char *buffer);
void encrypt(int size, unsigned char *buffer){
for(int i=0; i<size; i++){
unsigned char c = buffer[i];
printf("%c",c);
}
}
void decrypt(int size, unsigned char *buffer){
for(int i=0; i<size; i++){
unsigned char c = buffer[i];
printf("%c",c);
}
}
这是我的java代码(我知道在制作头文件后,我必须用头文件中的JNI代码替换C函数声明)
class Tester{
public native void encrypt(int size, char *buffer);
public native void decrypt(int size, char *buffer);
static{
System.loadLibrary("buffer");
{
public static void main(String[] args){
Tester test = new Tester();
String hello = "hello";
byte[] byteHello = hello.getBytes();
test.encrypt(5,byteHello);
test.decrypt(5,byteHello);
}
}
我知道 Java 不支持 char* 类型,这就是我在尝试编译时遇到错误的原因。也许我应该在 Java 中将类型更改为 char[]?无论如何,我的目标是能够将 Java 中的字节数组传递给我的 C 函数,遍历字节数组并打印出每个元素。
【问题讨论】:
-
java
char和 Cchar类型不兼容,最好将byte[]传递给 C,然后按需转换每个元素 -
"如何使用 Java Native Interface 将字节数组传递给以 char* 作为参数的 C 函数?" - 你不能,但你可以将一个字节数组传递给一个 C 函数,该函数将一个 Java 字节数组作为参数。
标签: java c char java-native-interface buffer