2011-12-08 15 views
12

Sto provando a convertire un jbyteArray in stringa nativa c (char *) in jni? Purtroppo non riesco a trovare alcuna documentazione su come farlo. Sto invocando una funzione java con il seguente prototipo nel codice c.Come convertire jbyteArray in char nativo * in jni?

public static byte[] processFile(byte[] p_fileContent) 

Nel codice c sto invocando questa funzione che restituisce un array di byte. Il contenuto di questo array di byte è una stringa java. Ma ho bisogno di convertirlo in una stringa c.

jbyteArray arr = (jbyteArray) env->CallObjectMethod(clsH, midMain, jb); 
printf("%s\n", (char*) arr); 

risposta

17

credo si usa GetByteArrayElements e ReleaseByteArrayElements. Qualcosa di simile:

boolean isCopy; 
jbyte* b = GetByteArrayElements(env, arr, &isCopy); 

Si dovrebbe essere in grado di lanciare b-char* a questo punto, al fine di accedere ai dati nella matrice. Si noti che questo può creare una copia dei dati, per cui ti consigliamo di fare in modo di liberare la memoria utilizzando ReleaseByteArrayElements:

ReleaseByteArrayElements(env, arr, b, 0); 

L'ultimo parametro è una modalità che indica come i cambiamenti a b dovrebbero essere gestite. 0 indica che i valori vengono copiati su arr. Se non si desidera copiare nuovamente i dati su arr, utilizzare invece JNI_ABORT.

Per ulteriori dettagli, vedere JNI Reference.

+0

Il tuo link è rotto. Per favore aggiornare. –

+0

@DRH L'aggiornamento di un collegamento 1.4.2 a un collegamento 1.5 non è un gran miglioramento. – EJP

+0

Attenzione terminerà con null. In generale, il contenuto del file non sarà terminato con null; Le funzioni di stringa C (++) potrebbero soffocare su quello. Per aggirarlo in modo affidabile, è necessario copiare i byte del file in un buffer di un byte più grande e impostare il byte finale su zero –

Problemi correlati