2012-11-08 3 views
2

나는 NDK 및 학습을 처음 사용합니다.Android에서 두 개의 jbyte 배열을 비교하는 방법 NDK

나는 위의 코드를 알고
jbyte bytes1[] = {48, -126, 1,4}; 
jbyte bytes2[] = {48, -126, 1,4}; 

jclass cls = (*env)->GetObjectClass(env, bytes1); 
jmethodID mid = (*env)->GetMethodID(env, cls, "equals", "([B)Z"); 
jboolean isEqual = (*env)->CallBooleanMethod(env, bytes1, mid, bytes2); 

잘못이지만 :

나는

여기

내가 가진 무엇 자바 코드에서 네이티브 메소드를 호출하는 데 성공하지만 두 jbyte 배열을 비교할 수있는 방법을 모른다 바이트 배열을 비교하는 올바른 방법이 있습니까

+0

가 바이트 배열이기 때문에, 당신은 당신이 equals 메소드의 기능을 필요로 확신? 루프에 대해 바이트별로 바이트를 비교하여 자신 만의 사용자 정의 코드를 작성할 수 있습니다. * jbyte *는 바이트로 처리되므로 제대로 작동합니다. –

+0

이전 주석에 대한 수정 : * jbyte *는 Android에서 signed char *로 해석됩니다. –

+0

자바에서 @ThomasCalc 바이트는 8 비트 부호있는 2의 보수 정수입니다. – auselen

답변

1

두 개의 jbyte 배열을 비교해야 할 경우 memcmp를 사용하십시오.

당신의 예에서
#include <string.h> 
int memcmp(const void *s1, const void *s2, size_t n); 

,

jboolean isEqual = (memcmp(bytes1, bytes2, 4) == 0); 
+0

하드 코딩 된 값을 사용해 주셔서 감사합니다. c에서'jbyteArray'와 harcoded 값 ('jbyte []')를 어떻게 비교할 수 있는지 알고 있습니까? 여기서'jbyteArray'는 자바 코드에서 네이티브 코드로 전달됩니다. – Saqib

+0

@Saqib http://192.9.162.55/docs/books/jni/html/objtypes.html#27346 – auselen

+0

다시 한번 감사드립니다. 'GetByteArrayRegion (env, src, 0, 10, dest)'를 사용하여'jbyteArray'를'jbyte []'로 변환했습니다. – Saqib

관련 문제