`
jinyanhui2008
  • 浏览: 319557 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

jstring 和char* 之间的转换方法

JNI 
阅读更多
//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 stoJstring(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数据类型转换

    ### JNI数据类型转换详解 ...掌握这些转换方法,不仅能提高跨语言编程的效率,还能避免潜在的内存泄漏和数据丢失风险。通过上述解析,开发者应能更加熟练地在JNI环境下进行数据交换,从而构建高效、稳定的跨平台应用。

    JNI文档资料源码_2020_01_28_2.zip

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

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

    在JASS中,字符串处理是非常常见的任务,涉及到字符串类型(JString)、字符串索引以及C语言的`char`类型之间的转换。 1. **字符串类型与字符串索引转换**: - `JString`是JASS中的字符串对象,用于存储和操作字符...

    最全的JNI书稿统稿.rar

    开发者需要理解如何在Java和C/C++之间转换数据,如`jint`对应Java的`int`,`jstring`对应Java的`String`。 6. **调用Java方法**:JNI支持静态和实例方法的调用。对于实例方法,使用`CallVoidMethod`系列函数;对于...

    android jni常用函数详解

    这些类型有助于确保Java和C/C++之间的数据兼容性。 #### 四、字符串操作函数 ##### 4.1 `GetStringUTFChars` **原型**: ```c const char* (JNICALL* GetStringUTFChars)(JNIEnv *env, jstring str, jboolean *is...

    android JNI机制分析

    ### Android JNI机制分析 ...以上步骤展示了如何在Android平台中实现Java与C/C++之间的通信以及如何利用JNI进行方法的注册和数据类型的映射。这对于理解和开发涉及高性能计算或底层操作的应用程序至关重要。

    NDK开发之C语言调用Java构造方法、父类方法、返回中文字符串乱码问题案例

    2. **创建JNI函数**:在C/C++代码中,定义对应于Java native方法的函数,使用`JNIEnv *env`指针来访问Java对象和方法。 3. **找到Java对象和方法**:使用`env`指针的`FindClass`函数查找Java类,然后使用`...

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

    6. **数据类型转换**:在Java和C/C++之间传递数据时,需要进行类型转换。比如,将Java的`int`转换为C的`jint`,或者将C的`char*`转换为Java的`jstring`。 7. **异常处理**:C/C++代码可以通过`ExceptionOccurred`...

    JNI 简介与实现(实用1).zip

    6. **数据类型转换**:JNI提供了一系列的数据类型,如`jint`, `jdouble`, `jstring`等,用于在Java和本地代码之间转换数据。例如,将Java的`String`转换为C的`char*`,可以使用`env-&gt;GetStringUTFChars()`。 7. **...

    Jni中C和Java的参数传递.doc

    3. **对象转换**:根据需要创建 C++ 结构体,并从 Java 对象中提取数据填充结构体;反之,如果需要更新 Java 对象,也需要将 C++ 结构体的数据转换回 Java 对象。 4. **内存管理**:注意内存的分配和释放,避免内存...

    JNI 简介与实现.zip

    7. **字符串处理**:JNI提供了处理Java字符串(`jstring`)到本地字符串(如C字符串`char*`)的函数,如`GetStringUTFChars()`和`NewStringUTF()`。 8. **异常处理**:JNI允许在本地代码中抛出和捕获Java异常,通过...

    jni实现图片格式转换实例

    在IT行业中,图片格式转换是一项常见的任务,尤其是在多媒体处理、图像分析或网络应用等领域。JNI,全称为Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。本文将深入...

    JNI开发步骤

    - **类型转换**:在Java和C/C++之间传递数据时需要注意类型转换,比如Java中的`boolean`类型对应C/C++中的`jboolean`类型。 - **内存管理**:C/C++代码需要正确处理内存分配和释放,避免内存泄漏等问题。 - **异常...

    jni02基本知识

    7. **数据类型转换**:JNI提供了数据类型转换的方法,例如将Java的`int`转换为C的`jint`,或者将Java的`String`转换为C的`const char*`。 8. **异常处理**:在本地代码中,可以通过`ExceptionCheck`检查是否抛出了...

    JAVA 调用DLL

    - **数据类型转换**:Java和C/C++的数据类型可能不完全相同,需要进行相应的转换,例如Java的`int`对应C的`jint`,Java的`String`对应C的`char*`等。 4. **示例中的`ttsDemo`**: 假设`ttsDemo.dll`是一个文本转...

    JNI调用第三方动态库

    - **JNI接口定义**:JNI接口定义了Java和本地代码之间的桥梁,包括函数指针类型、数据类型转换以及方法ID和类ID的概念。 - **本地方法**:在Java中,使用`native`关键字声明的函数就是本地方法,它们需要在C/C++...

    jni官方文档

    4. **转换Java字符串**:`jstring NewStringUTF(JNIEnv *env, const char *str)`用于从C/C++字符串创建Java字符串。 5. **调用Java方法**:`jobject CallObjectMethod(JNIEnv *env, jobject obj, jmethodID method, ...

Global site tag (gtag.js) - Google Analytics