一、jni jstring转string
在JNI开发中,经常需要把Java层的字符串转成C/C++层的字符串,其中比较常见的就是将jstring转换为char*或者std::string。下面我们将对这两种情况进行详细讲解。
1、jstring转char*
jstring转char*需要在JNI的Env环境下进行字符串操作,具体步骤如下:
char* jstringToChar(JNIEnv* env, jstring jstr) { if (jstr == NULL) { return NULL; } const char* cstr = env->GetStringUTFChars(jstr, NULL); if (cstr == NULL) { return NULL; } char* rtn = (char*)malloc(strlen(cstr) + 1); strcpy(rtn, cstr); env->ReleaseStringUTFChars(jstr, cstr); return rtn; }
说明:
调用 GetStringUTFChars 函数从 JVM 中获取 UTF8 编码指针 cstr;
获取字符串长度后,进行分配内存,然后复制 cstr 到新的空间 rtn;
ReleaseStringUTFChars 函数释放在 GetStringUTFChars 函数中获取 jstring 的字符串以及分配的内存。
2、jstring转std::string
jstring转std::string需要先将jstring转成char*,然后在用std::string进行封装。下面是代码实现:
std::string jstringToStdString(JNIEnv* env, jstring jstr) { if (jstr == NULL) { return ""; } char* chars = (char*)env->GetStringUTFChars(jstr, NULL); std::string ret(chars); env->ReleaseStringUTFChars(jstr, chars); return ret; }
说明:
调用 GetStringUTFChars 函数从 JVM 中获取 UTF8 编码指针 chars;
用 std::string 的构造函数把字符指针转换成std::string;
用 ReleaseStringUTFChars 函数释放在 GetStringUTFChars 函数中获取 jstring 的字符串。
二、jni jstring转char
有时候需要把jstring字符串转换成char类型,可以直接使用GetStringChars得到一个Unicode字符数组的指针:
char* jstringToChar(JNIEnv* env, jstring jstr) { if (jstr == NULL) { return NULL; } jboolean isCopy; const jchar* jcstr = env->GetStringChars(jstr, &isCopy); if (jcstr == NULL) { return NULL; } char* rtn = new char[strlen(jcstr) + 1]; int length = env->GetStringLength(jstr); for (int i = 0; i < length; i++) { rtn[i] = (char)jcstr[i]; } rtn[length] = '\0'; env->ReleaseStringChars(jstr, jcstr); return rtn; }
说明:
调用 GetStringChars 函数获取 Unicode 编码指针 jcstr;
获取字符串长度后分配内存,然后将Unicode字符转换成对应的ASCII字符;
ReleaseStringChars 函数释放在 GetStringChars 函数中获取的 jstring 的Unicode字符数组指针。
三、jsnumber转string
在JavaScript代码中,数字类型的值需要转换成字符串类型的值进行处理时,可以使用toString()方法来实现。具体代码示例如下:
var num = 1; var str = num.toString(); console.log(str); // 输出: "1"
说明:
使用toString()方法将数字类型的值转换为字符串类型的值。
四、总结
本文分别针对jni中jstring转char和std::string以及JavaScript中jsnumber转string进行了详细的讲解,并给出了相应的代码示例。在JNI开发中,我们可以通过jni函数将jstring转换成char*或者std::string;在JavaScript中,我们可以使用toString()方法来将数字类型的值转换成字符串类型的值进行处理。