string jstring、const char*、std::string 之间的转换

java  jni c++ 工作过程中常用的一些东西,在这里总结一下

获取field

env->getFieldID(class,"name",field类型);

获取method

env->getMethodID(class,"方法名",(参数)返回类型 );

这里需要搞一个类型问题

基本数据类型


还有三个特殊的string  object  arraylist  

string---Ljava/lang/String

object---Ljava/lang/Object

array---Ljava/util/ArrayList

如果没有返回值的话就用V,其中还有一个比较特殊情况,如果返回值是你定义的一个类型,那么返回的类型就是L包名+类名,包名之间要将  “.” 换成  “/”


工作过程中遇到一个问题

jstring---string--std::string---const char


jfield id = env->getFieldId();这个id是string的

有一个object想得到这个field

jobject string = env->callObjectField(obj,id)

强转:jstring newString = (jstring) string;

这样的话就简单了

下面介绍我常用的这三个转换的方式

jstring string = env->newStringUTF(const char *);

std::string string = const char *str;

const char* str = env->GetStringUTFChars(jstring,0);

上述这三个公式就可以相互转换

这里有一个需要注意的问题 local reference table overflow (max=512)

可以看这个博客介绍https://blog.youkuaiyun.com/xyang81/article/details/44873769

env->DeleteLocalRef(startdes);
这个东西可以解决问题



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值