我想学习下 android的java层和C语言层数组传递机制,就用了
GetByteArrayRegion和SetByteArrayRegion两个 函数,
现在的问题是 用SetByteArrayRegion 从 C==》》》java是没有问题的。
但是 从java==>>> C的话,用GetByteArrayRegion就出错。请大家帮我分析下为什么,下面是我的代码:
jbyteArray Java_com_example_test_Getdata(JNIEnv *env, jobject thiz)
{
.................///一些其他获取数据的代码
byteArray = (*env)->NewByteArray(env, size);
if (byteArray == NULL)
{
return NULL;
}
(*env)->SetByteArrayRegion(env, byteArray, 0, size,(jbyte *)data);
return byteArray;
}void Java_com_example_test_Setdata(JNIEnv *env, jobject thiz,jbyteArray jbuffer,jint size)
{ jbyteArray byteArray = NULL;
jbyte data[size];
(*env)->GetByteArrayRegion(env,jbuffer, 0, size, data); ///<-----这里出问题,请教下为什么,谢谢!!!
__android_log_print(ANDROID_LOG_INFO, "test", "test-----%.2x--%.2x--%.2x--%.2x--%.2x--%.2x--%.2x--",
size,
data[0],
data[1],
data[2],
data[3],
data[4],
data[5],
data[6]);
return ;
}
GetByteArrayRegion和SetByteArrayRegion两个 函数,
现在的问题是 用SetByteArrayRegion 从 C==》》》java是没有问题的。
但是 从java==>>> C的话,用GetByteArrayRegion就出错。请大家帮我分析下为什么,下面是我的代码:
jbyteArray Java_com_example_test_Getdata(JNIEnv *env, jobject thiz)
{
.................///一些其他获取数据的代码
byteArray = (*env)->NewByteArray(env, size);
if (byteArray == NULL)
{
return NULL;
}
(*env)->SetByteArrayRegion(env, byteArray, 0, size,(jbyte *)data);
return byteArray;
}void Java_com_example_test_Setdata(JNIEnv *env, jobject thiz,jbyteArray jbuffer,jint size)
{ jbyteArray byteArray = NULL;
jbyte data[size];
(*env)->GetByteArrayRegion(env,jbuffer, 0, size, data); ///<-----这里出问题,请教下为什么,谢谢!!!
__android_log_print(ANDROID_LOG_INFO, "test", "test-----%.2x--%.2x--%.2x--%.2x--%.2x--%.2x--%.2x--",
size,
data[0],
data[1],
data[2],
data[3],
data[4],
data[5],
data[6]);
return ;
}
解决方案 »
- 求一个简单的java xmpp 发送端和接受端例子
- 大神们..SQLite查询问题..请帮我看下这是什么情况
- 批量安装App的问题!求大神解惑!
- android如何禁止横竖屏切换?
- 有谁能解释下这段代码呢?
- 客户端如何能接收服务端非阻塞的socket发的消息
- ndk如何调用ndk自己包含的.a文件?
- 求助!!! BufferedReader readLine() 异常??
- 内部类使得代码很难维护,有没有好的建议
- apk里的安全证书只有华为有么,为什么突然加这么个限制?
- 请教android ndk 编程时 用cygwin 编译调用第三方zmq库问题!
- ListView左右滑动如果拦截item响应触摸事件?
我在native层用 byteArray = (*env)->NewByteArray(env, size);分配一个java的内存空间,把指针返回到java层,然后把这个指针又传回到native中,这样下来native再对这片内存拷贝就出错了,不清楚其中的道理, 哪位大神帮忙给解释下,谢谢了!