zoukankan      html  css  js  c++  java
  • android开发中,在java中怎样使用c提供过来char*

          这个char*假设是一般的字符串的话,作为string传回去就能够了。假设是含有’’的buffer,最好作为bytearray传出,由于能够制定copy的length。假设copy到string,可能到’’就截断了。

     
          有两种方式传递得到的数据: 
          一种是在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); 

    结束。

  • 相关阅读:
    Mybatis- 动态sql总结
    Mybatis- 映射文件标签总结
    mybatis全局配置文件标签

    环形链表介绍和约瑟夫环
    MyBatis入门 + 接口式编程(idea实现)
    尚硅谷 mybatis
    Android 开发中使用 SQLite 数据库
    DDMS中File Explorer无法查看data/data文件解决办法
    ANDROID 自动生成动态表格for
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6800738.html
Copyright © 2011-2022 走看看