web-dev-qa-db-ja.com

Javaのbyte []をC ++のunsigned char *に、またはその逆に変換する正しい方法は?

私はC++とJNIの初心者です。JNIを使​​用して、C++でJavaをunsigned char *に、またはその逆に変換する正しい方法を見つけようとしています。 Androidでの作業)GoogleとSOでソリューションを探した後、byte []をJavaからC++に変換する詳細な方法は見つかりませんでした。手伝って解決策を提供してください。その逆(C++のunsigned char *からJavaのbyte []へ)。

  • byte [] in Java to Cのunsigned char *:)==

Java:

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

JNI:

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

PS:私の問題に対する本当の質問になるように質問を修正しました:(

27
Hien Nguyen

これを使用して、unsigned char配列を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;
}

逆方向に変換するには...

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