Твой вопрос не очень понятен.
Предполагая, что у вас есть несколько байтов в C, представляющих символы, лучшая идея состоит в том, чтобы перевести байты в Java и преобразовать их в текст, используя преобразования байтов Java.
В JNI вам просто нужно материализовать массив Java, либо используя JNI для его создания, либо передавая ссылку в качестве параметра (для которого вам все еще нужно "материализовать" указатель в коде JNI). 1005 *
Я делал эту последнюю вещь раньше, так что вот код FYI. Этот вызов JNI использовал API-интерфейс AS / 400 C для чтения записи в базе данных и возврата байтов обратно в Java - код Java затем использовал информацию о формате записи для извлечения полей в строки. Надеюсь, что это поможет:
JNIEXPORT jboolean JNICALL Java_com_xxx_DB2File_jniRead(JNIEnv *jep, jobject thsObj,
jlong handle, jint readOp, jbyteArray jvaDta, jint jvaDtaMax, jint flags) {
OBJDTA *odp;
jbyte *jniDta;
_RIOFB_T *fbp;
thsObj=thsObj;
if((odp=getDataspace(handle))==NULL) {
throwEscape(jep,90003,"Invalid handle for dataspace in jniRead()");
return JNI_FALSE;
}
jniDta=(*jep)->GetByteArrayElements(jep,jvaDta,0);
// read database record here
if(fbp->num_bytes<=0) {
(*jep)->ReleaseByteArrayElements(jep,jvaDta,jniDta,JNI_ABORT); /* do not copy changed array back to java */
return JNI_FALSE;
}
if(fbp->num_bytes!=odp->rcdLen) {
byte errtxt[201];
asd_errtxt(errno,errtxt,sizeof(errtxt));
(*jep)->ReleaseByteArrayElements(jep,jvaDta,jniDta,JNI_ABORT); /* do not copy changed array back to java */
throwEscape(jep,90204,"Native function jniRead failed. Got %i, expected %i (%s)",fbp->num_bytes,odp->rcdLen,
errtxt);
return JNI_FALSE;
}
(*jep)->ReleaseByteArrayElements(jep,jvaDta,jniDta,0); /* copy changed array back to java */
return JNI_TRUE;
}