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

问题描述 投票:-1回答:1

我有两个问题:

  1. 如何将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;
    }
    
  2. 如何将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);
    }
    
java java-native-interface c++-cli
1个回答
0
投票

将const无符号char *转换为jbyteArray:

#include <mbstring.h>

JNIEXPORT jbyteArray JNICALL Java_MyJavaApplication_readValue(JNIEnv* env, jobject obj)
{
    const unsigned char* someConstUnsignedChar = (gcnew MyCSharpLibrary())->readValue();

    jsize len = (jsize)_mbslen(someConstUnsignedChar);
    jbyteArray someJbyteArray = env->NewByteArray(len);
    env->SetByteArrayRegion(someJbyteArray, 0, len, reinterpret_cast<const jbyte*>(someConstUnsignedChar));

    return someJbyteArray;
}

将jbyteArray转换为const unsigned char *:

JNIEXPORT jboolean JNICALL Java_MyJavaApplication_writeValue(JNIEnv* env, jobject obj, jbyteArray someJbyteArray)
{
    jsize len = env->GetArrayLength(someJbyteArray);
    jbyte* body = env->GetByteArrayElements(someJbyteArray, 0);
    unsigned char* someUnsignedChar = new unsigned char[len];
    for (jint i = 0; i < len; i++)
    {
        someUnsignedChar[i] = (unsigned char)body[i];
    }

    bool result = (gcnew MyCSharpLibrary())->writeValue((const unsigned char*)someUnsignedChar);

    env->ReleaseByteArrayElements(someJbyteArray, body, 0);
    return (jboolean)result;
}

它对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.