将 const unsigned char* 转换为 jbyteArray,反之亦然
Convert const unsigned char* to jbyteArray and vice versa
我有两个问题:
如何将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);
}
将 const unsigned char* 转换为 jbyteArray:
#include <tuple>
JNIEXPORT jbyteArray JNICALL Java_MyJavaApplication_readValue(JNIEnv* env, jobject obj)
{
const unsigned char* someConstUnsignedChar;
int len;
std::tie(someConstUnsignedChar, len) = (gcnew MyCSharpLibrary())->readValue();
jbyteArray someJbyteArray = env->NewByteArray((jsize)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;
}
对我有用。
我有两个问题:
如何将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); }
将 const unsigned char* 转换为 jbyteArray:
#include <tuple>
JNIEXPORT jbyteArray JNICALL Java_MyJavaApplication_readValue(JNIEnv* env, jobject obj)
{
const unsigned char* someConstUnsignedChar;
int len;
std::tie(someConstUnsignedChar, len) = (gcnew MyCSharpLibrary())->readValue();
jbyteArray someJbyteArray = env->NewByteArray((jsize)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;
}
对我有用。