Dies ist das erste Mal, dass ich das JNI verwende und auch das erste Mal, dass ich einige Zeilen in C schreiben muss.
Was ich versuche, ist sehr einfach. Ich versuche nur, die Endiannes eines Bytes zu wechseln[] mit einer C-Routine.
In Java geht das so:
public void switchEndianness(byte[] array){
byte byte1;
byte byte2;
for(int i = 0; i < array.length ; i+=2){
byte1 = array[i];
byte2 = array[i+1];
array[i] = byte2;
array[i+1] = byte1;
}
}
Um dies mit JNI zu tun, habe ich versucht, dieselbe Routine in JNICALL zu implementieren, aber sie wird nicht kompiliert. Was ich bisher geschrieben habe ist folgendes:
JNIEXPORT void JNICALL Java_CEndianness_switchEndianness(JNIEnv *env, jobject obj, jbyteArray array, jint offset, jint length){
char byte1;
char byte2;
int i;
for(i = offset; i < length ; i+=2){
byte1 = array[i];
byte2 = array[i+1];
array[i] = byte2;
array[i+1] = byte1;
}
}
Ich habe keine Ahnung, wie man den Datentyp jbyteArray verwendet. ist es möglich, ein jbyte in einem char zu speichern??? Eine andere Frage ist … wenn diese Routine vorbei ist … wird das Byte[] in Java geändert werden? Oder wird es nur innerhalb des C-Aufrufs geändert?
Irgendeine Hilfe???
Danke an Alle!