您的位置:首页 > 移动开发 > Android开发

android jni 将BYTE* 和 jbyteArray 之间的转换

2017-12-21 08:50 411 查看


今天,简单讲讲如何在jni中将

BYTE* 转成 jbyteArray。

这个是我在做jni时碰到的问题。因为c传回的值是BYTE*,而返回给java代码是byte[],对应的jni的数据必须是jbyteArray,所以需要转换。在网上搜索了资料,终于是解决了这个问题。

C++中的BYTE[]转jbyteArray

//nOutSize是BYTE数组的长度 BYTE pData[]

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[]

//jbytearray strIn

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 之间的转换就讲完了。

就这么简单。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息