网站大量收购闲置独家精品文档,联系QQ:2885784924

android jni数据类型转换.docxVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
android jni数据类型转换.docx

1.java/jni-c/c数据类型对应关系。 C标准库(libc),标准数学库(libm ),压缩库(libz),Log库(liblog). 2.如何将java传入的String参数转换为c的char*,然后使用? java传入的String参数,在c文件中被jni转换为jstring的数据类型,在c文件中声明char* test,然后 test = (char*)(*env)-GetStringUTFChars(env, jstring, NULL); 注意:test使用完后,必须手动释放内存(通知虚拟机平台相关代码无需再访问): (*env)-ReleaseStringUTFChars(env, jstring, test); 3.将c中获取的一个char*的buffer传递给java? 这个char*如果是一般的字符串的话,作为string传回去就可以了。如果是含有’\0’的buffer,最好作为bytearray传出,因为可以制定copy的length,如果copy到string,可能到’\0’就截断了。 有两种方式传递得到的数据: 一种是在jni中直接new一个byte数组,然后调用函数 (*env)-SetByteArrayRegion(env, bytearray, 0, len, buffer); 将buffer的值copy到bytearray中,函数直接return bytearray就可以了。 一种是return错误号,数据作为参数传出,但是java的基本数据类型是传值,对象是传递的引用,所以将这个需要传出的byte数组用某个类包一下,如下: class RetObj { public byte[] bytearray; } 这个对象作为函数的参数retobj传出,通过如下函数将retobj中的byte数组赋值便于传出。代码如下: jclass cls; jfieldID fid; jbyteArray bytearray; bytearray = (*env)-NewByteArray(env,len); (*env)-SetByteArrayRegion(env, bytearray, 0, len, buffer); cls = (*env)-GetObjectClass(env, retobj); fid = (*env)-GetFieldID(env, cls, retbytes, [B]); (*env)-SetObjectField(env, retobj, fid, bytearray); 4.如何在c中返回String给java char charStr[50]; jstring jstr; jstr = env - NewStringUTF(charStr); 5. 不知道占用多少空间的buffer,如何传递出去呢? 在jni的c文件中new出空间,传递出去。java的数据不初始化,指向传递出去的空间即可。 另:JNI中对JAVA传入数据的处理 如果传入的是bytearray的话,作如下处理得到buffer: view plaincopy to clipboardprint? 01.char *tmpdata = (char*)(*env)-GetByteArrayElements(env, bytearray, NULL); 02.(*env)-ReleaseByteArrayElements(env, bytearray, tmpdata, 0); jintArray????? int[] [F???? jfloatArray??? float[] [B???? jbyteArray??? byte[] [C??? jcharArray??? char[] [S??? jshortArray?? short[] [D??? jdoubleArray double[] [J???? jlongArray???? long[] [Z??? jbooleanArray boolean[] jbytearray转c++byte数组 jbyte * arrayBody = env-GetByteArrayElements(data,0); jsize theArrayLengthJ = env-GetArrayLength(data); BYTE * starter = (BYTE *)arrayBody; jbyteArray 转 c++中的BYTE[] //jbytearray strIn jbyte * olddata = (jbyte*)env-GetByteArrayElem

文档评论(0)

dmz158 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档