Bu yüzden java'dan bir C işlevini çağırmak için JNI kullanmam gerekiyor. Farklı veri türlerinde (yerel değişkenleri, başlık dosyasını, paylaşılan kütüphaneyi, blah blah'ı) geçirirken bunu başarılı bir şekilde yapabildim, ancak bir bayt dizisiyle çalışmasını sağlayamadım. İşte benim C işlevi var:Java Yerel Arabirimini, bir bayt dizisini arg * olarak bir char * alan bir C işlevine geçirmek için nasıl kullanabilirim?
#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);
}
}
Ve işte benim java kodu
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);
}
}
(bu bir başlık dosyası yaptıktan sonra, ben başlık dosyasına JNI'yı koduyla C işlev açıklamalarını değiştirmek zorunda olduğunu anlıyoruz)
Javada char * tipinin desteklenmediğini anlıyorum ve bu yüzden derlemeye çalışırken bir hata alıyorum. Belki de Java'daki tipi char [] olarak değiştirmeliyim? Her neyse, amacım Java'daki bir bayt dizisini C işlevime geçirebilmek, bayt dizisini yineleyip, her bir öğeyi yazdırabilmektir.
Java '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' byte ''' '' '' 'C'ye geçmek ve daha sonra her öğeyi dönüştürmek daha iyi olacaktır. talep –
"Java Yerel Arabirimini, bir bayt dizisini bir argüman olarak bir char * alan bir C işlevine geçirmek için nasıl kullanabilirim?" - yapamazsınız, ancak bir bayt dizisini argüman olarak bir Java bayt dizisini alan bir C işlevine geçirebilirsiniz. – immibis