将托管无符号字符*转换为jbyte*

Convert managed unsigned char* into a jbyte*

本文关键字:转换 jbyte 字符 无符号      更新时间:2023-10-16

如何将托管无符号char*转换为jbyte*?由于我是这方面的新手,所以一个片段也会很有帮助。

这是我的本地代码:-

JNIEXPORT jobject JNICALL Java_com_me_NativeCaller_processImages
    (JNIEnv *env, jclass c, jbyteArray front, jbyteArray back){
unsigned char* frontBuffer = convertJByteArrayIntoUnsignedChar(env, front);
unsigned char* backBuffer = convertJByteArrayIntoUnsignedChar(env, back);
System::Collections::Generic::List<cli::array<unsigned char>^>^ returnedValue = processImages(frontBuffer,backBuffer);
jbyte* bytes;
bytes = returnedValue[1];
bytes = returnedValue[2];
jbyteArray intermediateArray1 = env->NewByteArray(1);
env->SetByteArrayRegion(intermediateArray1,0,1,bytes);
return static_cast<jobject>(intermediateArray1);

}

bytes = returnedValue[1];,我收到一个错误,说"cli::array^类型的值不能分配给jbyte*类型的实体"

c返回字节列表[]的代码:-

public static List<byte[]> processImages(byte[] frontImage, byte[] backImage)
    {
        CallProcessFrontBackAndMICR(frontImage,backImage);
        List<Image> imagesToReturn = GetAllPages(tiffFileBuffer);//convert byte[] into two separate images
        front = imagesToReturn[0];
        back = imagesToReturn[1];
        List<byte[]> bytesToReturn = new List<byte[]>();
        bytesToReturn.Add(imageToByteArray(front));
        bytesToReturn.Add(imageToByteArray(back));
        return bytesToReturn;
    }

如果有人能帮我做这件事,那真的很有帮助。

要将unsigned char *格式的数据转换为jbyteArray,即Java中的byte[],如果我没记错的话,您需要执行以下操作:

JNIEnv *env... //usually from your method signature in the jni
unsigned char *myCharData; // by stipulation you have this somehow.
const int yourArraySize = // as per usual number of elements in the char *
jbyteArray myJByteArray = env->NewByteArray(yourArraySize);
env->SetByteArrayREgion(myJByteArray, 0, yourArraySize, (jbyte *) myCharData);
// your myJByteArray is ready to use. Don't forget to memory manage your myCharData, mind!

在给定jbyte的类型定义的情况下,c样式转换是有效的,我们可以认为它在本实现中是安全的。

在写这个问题的时候,我还不知道数据来自哪里,所以猜测一下,Android特定的文档,可以在这里找到。