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

时间:2024-03-22 08:42:51

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

获取field

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

获取method

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

这里需要搞一个类型问题

基本数据类型

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

还有三个特殊的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.csdn.net/xyang81/article/details/44873769

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