`

jstring, char* 变换函数

 
阅读更多
// jstring To char*
char* jstringTostring(JNIEnv* env, jstring jstr)
{
	char* rtn = NULL;
	jclass clsstring = env->FindClass("java/lang/String");
	jstring strencode = env->NewStringUTF("utf-8");
	jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");
	jbyteArray barr = (jbyteArray)env->CallObjectMethod(jstr, mid, strencode);
	jsize alen = env->GetArrayLength(barr);
	jbyte* ba = env->GetByteArrayElements(barr, JNI_FALSE);
	if (alen > 0)
	{
		rtn = (char*)malloc(alen + 1);
		memcpy(rtn, ba, alen);
		rtn[alen] = 0;
	}
	env->ReleaseByteArrayElements(barr, ba, 0);
	return rtn;
}

// char* To jstring
jstring stringTojstring(JNIEnv* env, const char* pat)
{ 
	jclass strClass = env->FindClass("Ljava/lang/String;"); 
	jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V"); 
	jbyteArray bytes = env->NewByteArray(strlen(pat)); 
	env->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat); 
	jstring encoding = env->NewStringUTF("utf-8"); 
	return (jstring)env->NewObject(strClass, ctorID, bytes, encoding); 
}
 
分享到:
评论

相关推荐

    char *转 jstring

    C++调用java java调用C++ 字符串参数传递 类型的转换

    android jni jstring

    2. **转换为C字符串**:使用`env-&gt;GetStringUTFChars()`函数,可以将`jstring`转换为可读写的C风格字符串(`char*`)。这个过程需要注意内存管理,因为`GetStringUTFChars()`返回的指针需要在使用完毕后释放,通过`...

    jni数据类型转换

    2. **C/C++ char*到JString**: ``` jstring jstr = env-&gt;NewStringUTF(charStr); ``` #### 结论 JNI的数据类型转换是实现Java与本地代码交互的关键环节。掌握这些转换方法,不仅能提高跨语言编程的效率,还能...

    ffmpeg编译的android可用的so文件,多个版本

    jstring string=(*env)-&gt;GetObjectArrayElement(env,cmdline,i); const char* tmp=(*env)-&gt;GetStringUTFChars(env,string,0); argv[i]=(char*)malloc(sizeof(char)*1024); strcpy(argv[i],tmp); } ffmpeg...

    android jni常用函数详解

    - **jstring**: Java字符串对象的句柄。 - **jclass**: Java类的句柄。 - **jmethodID**: Java方法标识符。 - **jfieldID**: Java字段标识符。 #### 三、JNI数据类型映射 JNI定义了一组基本数据类型,这些类型对应...

    JNI文档资料源码_2020_01_28_2.zip

    【Android NDK 开发】JNI 方法解析 ( 字符串数组参数传递 | 字符串遍历 | 类型强转 | Java 字符串与 C 字符串转换 | 字符串释放 ) ... 字符串转换 ( jstring -&gt; char* ) VI . 字符串释放 VII . 部分代码示例

    java与c++交互(JNI学习笔记)

    - Java 的 `String` 对应于 C/C++ 的 `jstring` 类型,表示Java字符串的引用。 #### 二、C/C++ 中 jclass 获取 JNI 提供了一些基本的函数来获取 Java 类 (`jclass`) 的引用。这些函数主要定义在 `jni.h` 头文件中...

    最全的JNI书稿统稿.rar

    4. **JNI函数接口**:JNI函数接口包括一系列的全局函数,如`JNIEnv *GetEnv(JavaVM *, jint)`用于获取JNI环境指针,`jclass FindClass(JNIEnv *, const char *)`用于查找类,`jmethodID GetMethodID(JNIEnv *, ...

    JNI学习二:字符串参数传递与返回值

    这个函数接受`JNIEnv`指针、`jobject`(Java对象的引用)和`jstring`(Java字符串)作为参数,并返回一个`jstring`。注意,字符串在Java和C/C++之间的处理方式不同: ```c++ #include "JNITest.h" JNIEXPORT ...

    android JNI机制分析

    - 使用 `JNIEnv*env-&gt;GetFieldID(jclass clazz, const char* fieldName, const char* fieldType)` 获取成员变量的ID。 - 假设 `BatteryService` 类中有一个布尔类型的成员变量 `mOnLine`,则可以使用如下代码获取...

    android 下c访问app的sqite数据库

    Java_com_example_yourapp_YourActivity_getDatabasePath(JNIEnv *env, jobject /* this */, jstring dbName) { const char *path = env-&gt;GetStringUTFChars(dbName, NULL); // 使用path进行C层操作 } ``` 2. ...

    魔兽1.24E内置字符串转换函数 以及 查找方法

    - `CharToString`:将单个`char`转换为`JString`。 - `StringToChar`:将`JString`的第一个字符转换为`char`。 2. **C的`char`类型处理**: - 在JASS中,通常不直接处理C语言的`char`数组,而是通过`JString`来...

    android jni使用libzip读取压缩文件

    char *buffer = new char[length]; AAsset_read(asset, buffer, length); jstring result = env-&gt;NewStringUTF(buffer); delete[] buffer; AAsset_close(asset); env-&gt;ReleaseStringUTFChars(fileName, ...

    android jni使用字符串

    const char* strChars = env-&gt;GetStringUTFChars(jstring, NULL); ``` 这里的`jstring`参数是我们从Java层传递过来的字符串对象,而`NULL`参数表示我们不关心是否需要释放这些字符。获取到UTF-8字符后,可以进行...

    jni环境搭建

    // 假设这里有一个名为testfunc的本地函数 env-&gt;ReleaseStringUTFChars(instring, str); return; } ``` **步骤四:配置VS2010的JNI环境** 1. 为了编译JNI代码,需要将JDK的`include`和`include\win32`目录下的`...

    Java-call-C.CPP.rar_C 调用java

    比如,将Java的`int`转换为C的`jint`,或者将C的`char*`转换为Java的`jstring`。 7. **异常处理**:C/C++代码可以通过`ExceptionOccurred`检查是否有Java异常发生,并通过`ExceptionDescribe`打印异常信息。如果...

    jni 构造字符串

    `NewString`函数接受C风格的字符串和其长度,然后返回一个`jstring`类型的引用。如果内存不足,`NewString`可能会返回`NULL`,此时需要检查并抛出异常。 注意,当使用`NewString`时,输入的字符串必须是Unicode编码...

    JNI开发步骤

    JNIEXPORT jstring JNICALL Java_com_example_MyNativeClass_sayHello(JNIEnv *env, jobject obj, jstring name) { const char *nameStr = (*env)-&gt;GetStringUTFChars(env, name, NULL); const char *helloMsg = ...

    JNI调用第三方动态库

    - **数据类型映射**:JNI提供了Java与C/C++数据类型的映射,例如`jint`对应`int`,`jstring`对应`const char*`。 5. **异常处理** - **Java异常**:在JNI中,如果遇到错误,可以抛出Java异常,通过`env-&gt;ThrowNew...

    Android JNI 用C函数写本地库读写文件,底层调用小例子

    const char *contentChars = (*env)-&gt;GetStringUTFChars(env, content, NULL); FILE *file = fopen(path, "w"); if (file != NULL) { fwrite(contentChars, strlen(contentChars), 1, file); fclose(file); } ...

Global site tag (gtag.js) - Google Analytics