Впервые я использую JNI, а также первый раз, когда мне нужно написать некоторые строки в C.
То, что я пытаюсь сделать, очень просто. Я просто пытаюсь переключить endiannes byte [] с помощью подпрограммы C.
В java это делается следующим образом:
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;
}
}
Итак, чтобы сделать это с помощью JNI, я попытался внедрить ту же процедуру в JNICALL, но она не компилируется. Я написал до сих пор следующее:
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;
}
}
Я не знаю, как использовать тип данных jbyteArray. возможно ли хранить jbyte в char? Другой вопрос: когда эта процедура закончится... будет ли байт [] изменен в java? Или это только изменено внутри вызова C?
Любая помощь???
Спасибо всем!