首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在安卓系统上通过jni向C传递byte[]时出现问题

在安卓系统上通过jni向C传递byte[]时出现问题
EN

Stack Overflow用户
提问于 2011-08-13 16:44:55
回答 3查看 9.4K关注 0票数 8

我在Java语言中有一个byte[],它报告它的长度为256字节,我将其传递给C语言的本机函数。

当我试图从这个数组中获取数据时,它是完全错误的,当我打印出它时,它与我将其传递给C之前打印出的数据不匹配。

我尝试了几种访问数据的方法,包括GetByteArrayRegionGetByteArrayElements,但似乎都没有给出我想要的数据。

当我调查这个的时候,我试着看看JNI认为GetArrayLengthjbyteArray的长度是多少-它报告的长度是1079142960,远远超过我预期的256个字节。而且每次调用函数的值都是不同的,例如另一次GetArrayLength返回1079145720。

下面是我用来访问数组的代码:

代码语言:javascript
运行
复制
JNIEXPORT jbyteArray function(JNIEnv* env, jbyteArray array) {
    int length = (*env)->GetArrayLength(env, array);

    jbyte data[256];

    (*env)->GetByteArrayRegion(env, array, 0, 256, data);
    //also tried
    //jbyte *data = (jbyte*) (*env)->GetByteArrayElements(env, array, NULL);
}

这看起来很简单,所以我不太确定到底是怎么回事。这个数组在Java中看起来很好,但它是用C生成的,并被传回,所以我认为可能出了什么问题,Java并不关心它,但当它返回到C时,它会破坏这个数组。

下面是我用来生成数组并将其传递回Java的代码:

代码语言:javascript
运行
复制
//there is some openSSL stuff here that sets up a pointer to an RSA struct called keys that is size bytes large

jbyteArray result = (*env)->NewByteArray(env, size);

(*env)->SetByteArrayRegion(env, result, 0, size, (jbyte*)keys;

我是不是遗漏了什么?

谢谢

EN

Stack Overflow用户

发布于 2011-08-13 17:09:38

请尝试在字符串后追加'\0‘字符。可能它不能识别字符串的结尾。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7049437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档