您的位置:

jstring转string的使用指南

一、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()方法来将数字类型的值转换成字符串类型的值进行处理。