• jstring, String, char* 变换函数


    1. #include <malloc.h>  
    2. #include <string.h>  
    3. #include <stdlib.h>  
    4. #include <vcclr.h>  
    5.   
    6. using namespace System;  
    7. using namespace System::Text;  
    8.   
    9. // jstring To String  
    10. String^ jstringToStr(JNIEnv* env, jstring jstr)  
    11. {  
    12.     char* str = jstringTostring(env, jstr);  
    13.     String^ value = gcnew String(str);  
    14.     free(str);  
    15.     return value;  
    16. }  
    17.   
    18. // jstring To char*  
    19. char* jstringTostring(JNIEnv* env, jstring jstr)  
    20. {  
    21.     char* rtn = NULL;  
    22.     jclass clsstring = env->FindClass("java/lang/String");  
    23.     jstring strencode = env->NewStringUTF("utf-8");  
    24.     jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");  
    25.     jbyteArray barr = (jbyteArray)env->CallObjectMethod(jstr, mid, strencode);  
    26.     jsize alen = env->GetArrayLength(barr);  
    27.     jbyte* ba = env->GetByteArrayElements(barr, JNI_FALSE);  
    28.     if (alen > 0)  
    29.     {  
    30.         rtn = (char*)malloc(alen + 1);  
    31.         memcpy(rtn, ba, alen);  
    32.         rtn[alen] = 0;  
    33.     }  
    34.     env->ReleaseByteArrayElements(barr, ba, 0);  
    35.     return rtn;  
    36. }  
    37.   
    38. // String To jstring  
    39. jstring strTojstring(JNIEnv* env, String^ rtn)  
    40. {  
    41.     pin_ptr<const wchar_t> wch = PtrToStringChars(rtn);  
    42.     size_t convertedChars = 0;  
    43.     size_t sizeInBytes = ((rtn->Length + 1) * 2);  
    44.     char *ch = (char *)malloc(sizeInBytes);  
    45.     errno_t err = wcstombs_s(&convertedChars,   
    46.         ch, sizeInBytes,  
    47.         wch, sizeInBytes);  
    48.     jstring js = stringTojstring(env, ch);  
    49.     free(ch);  
    50.     return js;  
    51. }  
    52.   
    53. // char* To jstring  
    54. jstring stringTojstring(JNIEnv* env, const char* pat)  
    55. {   
    56.     jclass strClass = env->FindClass("Ljava/lang/String;");   
    57.     jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");   
    58.     jbyteArray bytes = env->NewByteArray(strlen(pat));   
    59.     env->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat);   
    60.     jstring encoding = env->NewStringUTF("utf-8");   
    61.     return (jstring)env->NewObject(strClass, ctorID, bytes, encoding);   
  • 相关阅读:
    write(byte[] b, int off, int len)
    getAttribute 与getParmeter 区别
    ServletContext
    SercletConfig 详解
    MYSQL导入数据出现ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
    mybatis在xml文件中处理大于号小于号的方法
    阿里云实名认证接口调试
    js encodeuricomponent base64
    Introspector内存溢出的原理解析
    JVM虚拟机工作原理
  • 原文地址:https://www.cnblogs.com/xunbu7/p/3894223.html
Copyright © 2020-2023  润新知