Also muss ich JNI verwenden, um eine C-Funktion von Java aufzurufen. Ich konnte dies erfolgreich machen, wenn ich verschiedene Datentypen übergeben habe (native Variablen, Header-Datei, shared library, blah blah), aber ich kann es nicht mit einem Byte-Array arbeiten lassen. Hier ist meine C-Funktion:Wie kann ich Java Native Interface verwenden, um ein Byte-Array in eine C-Funktion zu übergeben, die ein char * als Argument verwendet?
#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);
}
}
Und hier ist mein Java-Code (Ich verstehe, dass, nachdem eine Header-Datei von dieser machen, ich habe die C-Funktion Erklärungen des JNI-Code in der Header-Datei ersetzen)
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);
}
}
Ich bekomme, dass der char * -Typ in Java nicht unterstützt wird und deshalb bekomme ich einen Fehler beim Kompilieren. Vielleicht sollte ich den Typ in Java auf char [] ändern? Wie auch immer, mein Ziel ist es, ein Byte-Array in Java in meine C-Funktion zu übergeben, durch das Byte-Array zu iterieren und jedes Element auszudrucken.
Die Java '' 'char''' und C' '' char''' Typen sind inkompatibel, es wäre wahrscheinlich besser das '' 'Byte []' '' an C zu übergeben und dann jedes Element zu konvertieren Anforderung –
"Wie kann ich Java Native Interface verwenden, um ein Byte-Array in eine C-Funktion zu übergeben, die ein char * als Argument verwendet?" - Sie können nicht, aber Sie können ein Byte-Array in eine C-Funktion übergeben, die ein Java-Byte-Array als Argument verwendet. – immibis