• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Javen-Studio 咖啡小屋

            http://javenstudio.org - C++ Java 分布式 搜索引擎
            Naven's Research Laboratory - Thinking of Life, Imagination of Future

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              24 隨筆 :: 57 文章 :: 170 評論 :: 4 Trackbacks
                寫Java JNI的時候最頭痛的莫過于字符集的轉(zhuǎn)換問題,眾所周知,Java里字符串是以Unicode編碼存儲的,而C/C++里大部分是單字節(jié)處理,這就涉及到一個轉(zhuǎn)換的問題,下面是兩個函數(shù)用來在JString到Char*之間的轉(zhuǎn)換:
            //author Naven 2003 for both Win32 and Unix os

            //為了便于使用,無需另連接庫,Win32里需自己寫雙字節(jié)memset函數(shù)
            #if    defined(_WIN32) || defined(__WIN32__)
            wchar_t 
            *mywmemset(wchar_t *_S, wchar_t _C, size_t _N)
            {
                wchar_t 
            *_Su = _S;
                
            for (; 0 < _N; ++_Su, --_N)
                        
            *_Su = _C;
                
            return (_S); 
            }
            #endif

            //將Java里jstring類型轉(zhuǎn)換成單字節(jié)字符串
            size_t JStringToChars(JNIEnv *env, 
                
            const jstring jstr, char *mbstr, const size_t mbslen) 
            {
                
            const jchar *jwstr; 
                wchar_t 
            *wbuf=0
                size_t nsize
            =0
                jsize jlen
            =0
                register 
            int i=0

                memset(mbstr, 
            0, mbslen); 
                
            if( jstr == NULL ) return 0
                jwstr 
            = (*env)->GetStringChars(env, jstr, 0); 

                jlen 
            = (*env)->GetStringLength(env, jstr); 
                
            if( jlen <= 0 ) return 0

            #if    defined(_WIN32) || defined(__WIN32__)
                wbuf 
            = (wchar_t *) jwstr; 
                nsize 
            = wcstombs(mbstr, wbuf, mbslen-1); 
            #else
                wbuf 
            = (wchar_t *) malloc((jlen+1)*sizeof(wchar_t)); 
                mywmemset(wbuf, (wchar_t)
            0, (size_t)(jlen+1)); 

                
            for( i = 0; i < jlen; i ++ ) 
                    wbuf[i] 
            = (wchar_t)jwstr[i]; 

                nsize 
            = wcstombs(mbstr, wbuf, mbslen-1); 
                free(wbuf); 
            #endif

                
            if( nsize >= 0 && nsize < mbslen ) 
                    mbstr[nsize] 
            = 0
                
                
            return nsize; 
            }

            //將單字節(jié)字符串轉(zhuǎn)換成Java里可使用的jstring類型
            size_t CharsToJString(JNIEnv *env, 
                
            const char *mbstr, jstring *jstr) 
            {
                jchar 
            *jwstr=0
                wchar_t 
            *wcstr=0
                size_t slen
            =0, nsize=0
                register 
            int i=0;

                
            if( mbstr != NULL ) 
                    slen 
            = strlen(mbstr); 
                
            if( mbstr == NULL || slen <= 0 ) { 
                    
            *jstr = (*env)->NewStringUTF(env, ""); 
                    
            return 0
                }

                wcstr 
            = (wchar_t *) malloc((slen+1)*sizeof(wchar_t)); 
                mywmemset(wcstr, 
            0, slen+1); 
                nsize 
            = mbstowcs(wcstr, mbstr, slen*2); 
                
                jwstr 
            = (jchar *) wcstr; 

            #if    defined(_WIN32) || defined(__WIN32__)
            #else
                
            for(i =0; i < (int)nsize; i ++) {
                    jwstr[i] 
            = jwstr[i*2]; 
                }
                jwstr[nsize] 
            = 0
            #endif

                
            if( nsize <= 0 ) 
                    
            *jstr = (*env)->NewStringUTF(env, ""); 
                
            else 
                    
            *jstr = (*env)->NewString(env, jwstr, nsize); 

                free(wcstr); 
                
            return nsize;
            }
            posted on 2005-10-03 11:40 Javen-Studio 閱讀(758) 評論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久精品人人做人人爽电影| 久久精品无码专区免费青青| 色悠久久久久久久综合网| 日日狠狠久久偷偷色综合96蜜桃| 欧美久久久久久| 国产精品99久久免费观看| 久久久久国产视频电影| 色欲综合久久躁天天躁蜜桃| 久久精品一区二区影院| 色狠狠久久AV五月综合| 青青草原综合久久大伊人导航 | 97久久超碰国产精品旧版| 久久久久久久综合综合狠狠| 久久久久久毛片免费播放| 国产精品熟女福利久久AV| 久久综合国产乱子伦精品免费| 久久精品国产精品亚洲| AAA级久久久精品无码片| 久久久久久久综合狠狠综合| 色噜噜狠狠先锋影音久久| 久久水蜜桃亚洲av无码精品麻豆| 久久精品无码一区二区日韩AV| 久久99精品国产一区二区三区| 99精品国产99久久久久久97| 一级女性全黄久久生活片免费 | 偷窥少妇久久久久久久久| 久久99精品国产麻豆蜜芽| 久久ww精品w免费人成| 久久香蕉超碰97国产精品| 久久久久久精品免费免费自慰| 久久久综合香蕉尹人综合网| 一本久久a久久精品综合夜夜 | 久久久久久久精品妇女99| 久久久久久精品久久久久| 色综合久久久久综合99| 久久午夜免费视频| 伊人久久亚洲综合影院| 国内精品久久久久影院亚洲| 中文字幕久久亚洲一区| 久久精品国产亚洲AV不卡| 亚洲精品乱码久久久久久按摩|