android个人笔记(四)——JNI、C++字符串转换
2014-01-15 10:52
561 查看
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; }
相关文章推荐
- C\C++ 程序员从零开始学习Android - 个人学习笔记(四) - java基础 - 数据类型、变量、字符串、数组
- JNI 学习笔记(一)——字符串字符集转换
- 【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- 个人笔记 asp 09 asp字符串转换
- Android-使用C++实现调用本地方法返回字符串显示在界面上/NDK-JNI开发实例(八)
- 【Android笔记-异常-3】数字在TextView中显示一定要先转换为字符串。String.valueOf(数字)
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- C++学习笔记 将数据以特定的格式转换成字符串形式打印
- C\C++ 程序员从零开始学习Android - 个人学习笔记(十) - java基础 - 多线程(待续)
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- android jni开发 把一段java代码转换成c++方式调用
- C\C++ 程序员从零开始学习Android - 个人学习笔记(一) - 计划和书籍
- 个人笔记 js 15 js字符串的转换
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- C\C++ 程序员从零开始学习Android - 个人学习笔记(九) - java基础 - 异常
- C\C++ 程序员从零开始学习Android - 个人学习笔记(二) - java基础 - 从源代码到运行
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- android jni c++ jstring和string之间的转换
- C\C++ 程序员从零开始学习Android - 个人学习笔记(三) - java基础 - 环境和工具