工作中用到jni字符数组返回的情况,按照字符串返回出现了数据异常 今天,简单讲讲如何在jni中将 BYTE* 转成 jbyteArray。
这个是我在做jni时碰到的问题。因为c传回的值是BYTE*,而返回给java代码是byte[],对应的jni的数据必须是jbyteArray,所以需要转换。在网上搜索了资料,终于是解决了这个问题。
C
++中的BYTE
[]转jbyteArray
jbyte
*by
= (jbyte
*)pData
;
jbyteArray jarray
= env
->NewByteArray(nOutSize
);
env
->SetByteArrayRegin(jarray
, 0, nOutSize
, by
);
这个将C++中的BYTE[]转jbyteArray主要是先用jbyte *强制jbyteArray,然后调用SetByteArrayRegin将jbyte *的数据拷贝到新建的jbyteArray、
jbyteArray 转 c
++中的BYTE
[]
jbyte
* olddata
= (jbyte
*)env
->GetByteArrayElements(strIn
, 0);
jsize oldsize
= env
->GetArrayLength(strIn
);
BYTE
* bytearr
= (BYTE
*)olddata
;
int len
= (int)oldsize
;
这个将jbyteArray 转 c++中的BYTE[]主要是获取jbytearray 数据后直接强制为BYTE*。
android jni 将BYTE* 和 jbyteArray 之间的转换就讲完了。
就这么简单。
参考链接