33

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

  • Java の byte[] から C++ の unsigned char* へ:

ジャワ:

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

JNI:

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

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

4

2 に答える 2

80

これを使用して、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;
}
于 2013-05-21T10:44:25.460 に答える