JAVA的byte[]转到 native中的 unsigned char的问题

sno_guo 2013-08-01 11:34:00
大家好:
请问下, 我想把 java层的 byte[]的二进制数据,传递到native层使用,然后解码后再 memcpy到surface中。
1,转换如下:
jint Java_com_testJni_setData(JNIEnv* env, jobject thiz, jbyteArray in, jint length)
{
char* data = NULL;
if (NULL != in) {
if (0 < length) {
void *data = malloc(length);
(*env)->GetByteArrayRegion(env,in, (jint)0, length, (jbyte *) data);
............////这里把数据投递到一个C代码的一个内存池里

}
}
return 0;
}
2,可是这样我感觉没有什么问题,可是当有数据传递过来时, native层的把解码后的数据传递到surface的时候就出现
08-01 11:33:54.685: A/libc(11713): Fatal signal 11 (SIGSEGV) at 0x4ce6d000 (code=1)

其问下为什么???


3,如果不把数据传递到上层,则没有这个错误提醒!!!

请教下大牛,这个是为什么,谢谢!

...全文
754 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sno_guo 2013-08-11
  • 打赏
  • 举报
回复
哦,谢谢doveqian, 问下 明明 传过来的是一块数据,里面是二进制的数据, 你为什么要在后面增加一个'\0'呢,谢谢! 这样增加后,岂不是多了一个字节的数据, 我传递的是二进制数据,不是string。
doveqian 2013-08-02
  • 打赏
  • 举报
回复
你这样写有问题不对吧 我是这样写的:

unsigned char *byteArrayToByte(JNIEnv* env, jbyteArray byteArray) {
	jbyte *pjb = (jbyte *) (*env)->GetByteArrayElements(env, byteArray, 0);
	jsize jlen = (*env)->GetArrayLength(env, byteArray);
	INT len = (INT) jlen;
	UINT8 *byBuf = NULL;

	if (len > 0) {
		byBuf = (char*) malloc(len + 1);
		memcpy(byBuf, pjb, len);
		byBuf[len] = '\0';
	}
	else {
		byBuf = (char*) malloc(1);
		byBuf[0] = '\0';
	}

	(*env)->ReleaseByteArrayElements(env, byteArray, pjb, 0);
	return byBuf;
}
乾坤幻影 2013-08-01
  • 打赏
  • 举报
回复
char* data = NULL; void *data = malloc(length); 这样是否定义了两个data呢?
sno_guo 2013-08-01
  • 打赏
  • 举报
回复
谢谢回复, 这样的问题是一样的,我都测试过, 还是有问题
绝世酱油瓶 2013-08-01
  • 打赏
  • 举报
回复
char* uc = (char*) (*env)->GetByteArrayElements(env, ucData, 0);
我是直接这样写的.
jbyteArray ucData

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧