web-dev-qa-db-fra.com

Une façon correcte de convertir l'octet [] en Java en char non signé * en C ++, et vice versa?

Je suis novice en C++ et JNI, j'essaie de trouver un moyen correct de convertir l'octet [] en Java en char non signé * en C++ en utilisant JNI, et vice versa! (Je suis travaillant sur Android) Après avoir recherché une solution dans google et SO, je n'ai pas trouvé un bon moyen de convertir l'octet [] en Java en C++. Aidez-moi et fournissez une solution pour l'inverse (caractère non signé * en C++ à octet [] en Java) Merci beaucoup

  • byte [] in Java to unsigned char * in C++:

Java:

private static native void nativeReceiveDataFromServer(byte[] value, int length);

JNI:

... (JNIEnv* env, jobject thiz, jbyteArray array, jint array_length)
{
    ???
}

PS: j'ai modifié ma question pour qu'elle soit une vraie question pour mon problème :(

27
Hien Nguyen

Vous pouvez l'utiliser pour convertir unsigned char tableau dans un jbyteArray

jbyteArray as_byte_array(unsigned char* buf, int len) {
    jbyteArray array = env->NewByteArray (len);
    env->SetByteArrayRegion (array, 0, len, reinterpret_cast<jbyte*>(buf));
    return array;
}

pour convertir l'inverse ...

unsigned char* as_unsigned_char_array(jbyteArray array) {
    int len = env->GetArrayLength (array);
    unsigned char* buf = new unsigned char[len];
    env->GetByteArrayRegion (array, 0, len, reinterpret_cast<jbyte*>(buf));
    return buf;
}
65
Zharf