JavaからC関数を呼び出すには、JNIを使用する必要があります。私は正常に別のデータ型(ネイティブ変数、ヘッダーファイル、共有ライブラリ、blahの曖昧さを作成する)を渡すときにこれを行うことができましたが、バイト配列で動作するようにすることはできません。ここに私のC関数です:Java Native Interfaceを使用して、char *を引数とする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コードです
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);
}
}
(私はこれからヘッダファイルを作成した後、私はヘッダファイルにJNIコードでC関数宣言を交換する必要があることを理解します)
Javaでchar *型がサポートされていないので、コンパイルしようとするとエラーが発生します。おそらく私はJavaのchar []に型を変更する必要がありますか?とにかく、私の目標は、Javaのバイト配列をC関数に渡し、バイト配列を反復して各要素を出力することです。
java '' 'char'''と' 'char'''型は互換性がないので、' 'byte []' '' 'をCに渡してから各要素を –
「Java Native Interfaceを使用して、char *を引数にとるC関数にバイト配列を渡すにはどうすればよいですか? - できませんが、バイト配列をJavaバイト配列を引数として取るC関数に渡すことができます。 – immibis