Java字符转C的思路

 一个汉字是两个字节(gbk),每个都是一个负数,要截取的话如果遇到单个字符就会出现乱码错误。所以通过以下代码实现截取    
    public static String getString(String str, int len){
            byte[] datas = str.getBytes(); 
            //存放汉字字符的个数
            int count = 0;
            for(int i=0; i<len; i++){
                if(datas[i] < 0){
                    count++;
                }
            }
            //如果为单个,在长度后加一,如果刚好是两个(代表没有半个汉字的问题),正常输出
            if(count%2 != 0){
                len += 1;
            }
            
            return new String(datas,0,len);
        }


java字符串转C

        //java中的字符串对象 -> c中的字符串指针
    char* string2c(jstring jstr,JNIEnv* env)
    {
        //调用字符串对象的getBytes方法
        //通过反射机制
        //1.获取class        java.lang.String
        jclass clazz = (*env)->FindClass(env,"java/lang/String");
        //2.获取method    getBytes("UTF-8")
        jmethodID mid = (*env)->GetMethodID(env,clazz,"getBytes","(Ljava/lang/String;)[B");
        //3.jstr     java中传递过来的对象
    
        //4.调用        返回字节数组
        jbyteArray jba = (jbyteArray)(*env)->CallObjectMethod(env,jstr,mid,(*env)->NewStringUTF(env,"UTF-8"));
    
        //把java中字节数组转换成C字节数组(jbyte 就是signed char)
        jbyte* datas = (*env)->GetByteArrayElements(env,jba,JNI_FALSE);
        //获取数组的长度
        jsize len = (*env)->GetArrayLength(env,jba);
    
        char* cstr = malloc(len+1);//加1表示加字符串的结束标记
    
        //拷贝字符串
        memcpy(cstr,datas,len);
        cstr[len] = "\0";
    
        //释放 字符串获取到的字节数组对象
        (*env)->ReleaseByteArrayElements(env,jba,datas,len);
    
        return cstr;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值