将托管的unsigned char *转换为jbyte * [英] Convert managed unsigned char* into a jbyte*

查看:380
本文介绍了将托管的unsigned char *转换为jbyte *的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将托管的无符号字符*转换为jbyte *?
因为我是新的,一个片段将是有帮助的。



这里是我的原生代码:

  JNIEXPORT jobJNICALL 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);

}



$ c> bytes = returnedValue [1]; 我得到一个错误说类型cli :: array的值不能分配给一个类型为jbyte *的实体



c#代码,返回byte []的列表: -

  public static List< byte []> processImages(byte [] frontImage,byte [] backImage)
{
CallProcessFrontBackAndMICR(frontImage,backImage);

List< Image> imagesToReturn = GetAllPages(tiffFileBuffer); //将byte []转换为两个单独的图像
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 这是 byte [] 在Java中,如果我记得正确,你想做一些像:

  JNIEnv * env ... //通常从你的方法签名在jni 
unsigned char * myCharData; //通过规定你有这个不知何故。
const int yourArraySize = //根据char *中常用的元素数量
jbyteArray myJByteArray = env-> NewByteArray(yourArraySize);
env-> SetByteArrayREgion(myJByteArray,0,yourArraySize,(jbyte *)myCharData);

//你的myJByteArray可以使用了。不要忘记内存管理你的myCharData,心灵!

c风格的转换工作给出了jbyte的类型定义,我们可以假定它是安全的这个实现。



在写这个问题的时候,我没有意识到数据来自哪里,所以猜测,Android特定的文档,可以此处


How can I convert a managed unsigned char* into a jbyte*? since I'm new to this, a snippet would be helpful too.

here is my native code:-

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);

}

here at bytes = returnedValue[1];I'm getting an error saying "a value of type cli::array^ cannot be assign to an entity of type jbyte*"

c# code which returns a List of byte[] :-

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;
    }

it's really helpful if someone can help me with this.

解决方案

To convert a data in unsigned char * format to a jbyteArray which is byte[] in Java, if I remember rightly you want to do something like:

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!

The c-style cast works given the type definition of the jbyte, which we can assume is safe in this implementation.

At the time of writing this question, I haven't been aware where the data was coming from, so taking a guess, Android-specific docs, can be found here.

这篇关于将托管的unsigned char *转换为jbyte *的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆