猿问

将 const unsigned char* 转换为 jbyteArray,反之亦然

我有两个问题:


如何将 const unsigned char* 转换为 jbyteArray?


JNIEXPORT jbyteArray JNICALL Java_MyJavaApplication_readValue(JNIEnv* env, jobject obj)

{

    const unsigned char* someConstUnsignedChar = (gcnew MyCSharpLibrary())->readValue();

    // What should be here?

    return someJbyteArray;

}

如何将 jbyteArray 转换为 const unsigned char*?


JNIEXPORT jboolean JNICALL Java_MyJavaApplication_writeValue(JNIEnv* env, jobject obj, jbyteArray someJbyteArray)

{

    // What should be here?

    return (gcnew MyCSharpLibrary())->writeValue(someConstUnsignedChar);

}


阿晨1998
浏览 131回答 1
1回答

呼唤远方

将 const unsigned char* 转换为 jbyteArray:#include <tuple>JNIEXPORT jbyteArray JNICALL Java_MyJavaApplication_readValue(JNIEnv* env, jobject obj){&nbsp; &nbsp; const unsigned char* someConstUnsignedChar;&nbsp; &nbsp; int len;&nbsp; &nbsp; std::tie(someConstUnsignedChar, len) = (gcnew MyCSharpLibrary())->readValue();&nbsp; &nbsp; jbyteArray someJbyteArray = env->NewByteArray((jsize)len);&nbsp; &nbsp; env->SetByteArrayRegion(someJbyteArray, 0, len, reinterpret_cast<const jbyte*>(someConstUnsignedChar));&nbsp; &nbsp; return someJbyteArray;}将 jbyteArray 转换为 const unsigned char*:JNIEXPORT jboolean JNICALL Java_MyJavaApplication_writeValue(JNIEnv* env, jobject obj, jbyteArray someJbyteArray){&nbsp; &nbsp; jsize len = env->GetArrayLength(someJbyteArray);&nbsp; &nbsp; jbyte* body = env->GetByteArrayElements(someJbyteArray, 0);&nbsp; &nbsp; unsigned char* someUnsignedChar = new unsigned char[len];&nbsp; &nbsp; for (jint i = 0; i < len; i++)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; someUnsignedChar[i] = (unsigned char)body[i];&nbsp; &nbsp; }&nbsp; &nbsp; bool result = (gcnew MyCSharpLibrary())->writeValue((const unsigned char*)someUnsignedChar);&nbsp; &nbsp; env->ReleaseByteArrayElements(someJbyteArray, body, 0);&nbsp; &nbsp; return (jboolean)result;}这个对我有用。
随时随地看视频慕课网APP

相关分类

Java
我要回答