一、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 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()方法來將數字類型的值轉換成字元串類型的值進行處理。
原創文章,作者:ANUSX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/331573.html