JNI: Cómo obtener el tamaño jbyteArray

Fondo

Estoy trabajando con arrays de bytes en JNI . Y no puedo conseguir la longitud de jbyteArray . Estoy escribiendo código en eclipse en Windows 7 .

Código Java:

private native int Enroll( byte[] pSeed ); 

Código JNI:

En JNI tengo una estructura que tiene dos miembros unsigned long length y unsigned char data[1]

 typedef struct blobData_s { unsigned long length; unsigned char data[1]; } blobData_t; 

Ahora como mi función JNI obtener como argumento jbyteArray jpSeed quiero obtener la longitud de jpSeed y establecerlo como miembro de longitud de struct.

 JNIEXPORT jint JNICALL Java_com_Test_Enroll( JNIEnv* env, jobject thiz, jbyteArray jpSeed ){ blobData_t* bd = malloc( sizeof(blobData_t) ); bd->length = **Question 1** bd->data[1] = jbyteArray; } 

Pregunta 1: ¿Cómo puedo obtener la longitud de jpSeed en JNI?

Pregunta 2: ¿Funciona este código correctamente bd.data[1] = jbyteArray; ?

  1. Puede utilizar GetArrayLength(JNIEnv* env, jbyteArray array) Lea aquí .

  2. No estoy seguro de lo que quieres hacer, supongo que quieres el contenido de jpSeed en bd.data[1] . De todos modos, acceder al contenido de una matriz de bytes, debe hacerse con GetByteArrayElements(...).

Solución

Respuesta a la pregunta 1. Como jpSeed es jbyteArray significa que puede obtener su longitud llamando a GetByteArrayElements( ... ) funciones que declaró en JNI (puede leer la documentación aquí ) aquí el código correcto será:

 JNIEXPORT jint JNICALL Java_com_Test_Enroll( JNIEnv* env, jobject thiz, jbyteArray jpSeed ){ blobData_t* bd = malloc( sizeof(blobData_t) ); bd->length = (*env)->GetArrayLength( env, jpSeed ); ....... } 

Respuesta a la pregunta 2. Este bd->data[1] = jbyteArray; Código no es correcto ya que no se compilará la solución correcta para esta parte es:

 JNIEXPORT jint JNICALL Java_com_Test_Enroll( JNIEnv* env, jobject thiz, jbyteArray jpSeed ){ blobData_t* bd = malloc( sizeof(blobData_t) ); ....... jbyte* bytes = (*env)->GetByteArrayElements( env, jpSeed, 0 ); bd->data[1] = bytes[1]; } 

Y no te olvides de liberar.

  • Tamaño de pantalla Honeycomb Menu android
  • Cómo encontrar la "última página" en un paginador de vista. O el número total de puntos de vista. Desarrollo de Android
  • ¿Cómo puedo configurar el ancho de los botones de radio para cambiar con respecto al tamaño de la pantalla? (androide)
  • Obtener el tamaño de Bitmap Android
  • ¿Cómo obtener el tamaño del widget de la aplicación?
  • Cómo especificar el tamaño del icono en el Marcador en Google Maps V2 Android
  • Obtener ActionBarSherlock actionBarSize en Android 2.x
  • No se encontró ningún identificador de recursos para XLargeScreens
  • Cómo cambiar el tamaño de Android ScrollView
  • Ancho de notificación de Android
  • ¿Cuál es la diferencia entre getWidth / Height () y getMeasuredWidth / Height () en Android SDK?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.