您的位置:首页 > 编程语言 > C语言/C++

android个人笔记(四)——JNI、C++字符串转换

2014-01-15 10:52 519 查看

string转jstring

//C字符串转java字符串
jstring str2Jstring(JNIEnv* env, const char* pStr)
{
int        strLen    = strlen(pStr);
LOGI("Have get strLen: %d", strLen);
jclass     jstrObj   = env->FindClass("java/lang/String");
jmethodID  methodId  = env->GetMethodID(jstrObj, "<init>", "([BLjava/lang/String;)V");
jbyteArray byteArray = env->NewByteArray(strLen);
jstring    encode    = env->NewStringUTF("utf-8");
env->SetByteArrayRegion(byteArray, 0, strLen, (jbyte*)pStr);

return (jstring)env->NewObject(jstrObj, methodId, byteArray, encode);
}

jstring转string

//java字符串转C字符串
char* Jstring2str(JNIEnv* env, jstring jstr)
{
char* pStr = NULL;
jclass     jstrObj   = env->FindClass("java/lang/String");
jstring    encode    = env->NewStringUTF("utf-8");
jmethodID  methodId  = env->GetMethodID(jstrObj, "getBytes", "(Ljava/lang/String;)[B");
jbyteArray byteArray = (jbyteArray)env->CallObjectMethod(jstr, methodId, encode);
jsize      strLen    = env->GetArrayLength(byteArray);
jbyte      *jBuf     = env->GetByteArrayElements(byteArray, JNI_FALSE);
if (jBuf > 0)
{
pStr = (char*)malloc(strLen + 1);
if (!pStr)
{
return NULL;
}
memcpy(pStr, jBuf, strLen);
pStr[strLen] = 0;
}
env->ReleaseByteArrayElements(byteArray, jBuf, 0);
return pStr;
}

jstring转wchar_t*

wchar_t* js2w(JNIEnv* env, jstring str)
{
int len = env->GetStringLength(str);
const jchar* charBuffer = env->GetStringChars(str, 0);

wchar_t *w_buffer = new wchar_t[len + 1];
memset(w_buffer,0,(len + 1) * sizeof(wchar_t));

for(int i = 0; i != len; ++i)
{
w_buffer[i] = charBuffer[i];
}

w_buffer[len]='\0';
//wcsncpy(w_buffer, (const wchar_t*)temBuf, wLen + 1);
env->ReleaseStringChars(str,(const unsigned short *)w_buffer);
return w_buffer;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  字符转换 android
相关文章推荐