Quindi ho bisogno di usare JNI per chiamare una funzione C da java. Sono stato in grado di farlo con successo quando si passavano in diversi tipi di dati (creare le variabili native, il file di intestazione, la libreria condivisa, blah blah), ma non riuscivo a farlo funzionare con un array di byte. Ecco la mia funzione C:Come posso utilizzare Java Native Interface per passare un array di byte in una funzione C che accetta un char * come argomento?
#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);
}
}
Ed ecco il mio codice Java (Mi rendo conto che dopo aver fatto un file di intestazione da questo, devo sostituire le dichiarazioni di funzione C dal codice JNI nel file di intestazione)
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);
}
}
Ho capito che il tipo char * non è supportato in Java ed è per questo che sto ricevendo un errore nel tentativo di compilare. Forse dovrei cambiare il tipo in char [] in Java? Ad ogni modo, il mio obiettivo è essere in grado di passare un array di byte in Java nella mia funzione C, iterare attraverso l'array di byte e stampare ogni elemento.
I tipi java '' 'char''' e C' '' char''' sono incompatibili, sarebbe probabilmente meglio passare il '' 'byte []' '' a C e quindi convertire ogni elemento su richiesta –
"Come posso utilizzare Java Native Interface per passare un array di byte in una funzione C che accetta un char * come argomento?" - Non puoi, ma puoi passare un array di byte in una funzione C che accetta un array di byte Java come argomento. – immibis