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