当前位置: 首页 > 工具软件 > JByte > 使用案例 >

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

洪承天
2023-12-01


今天,简单讲讲如何在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 之间的转换就讲完了。


就这么简单。

 类似资料: