java里传递这种字符串
ep.exCapability = "\0x6F\0x00\0xF0\0x10\0x01";
c里只能识别\x 不能识别\0x,因为\0被当作结束符处理。
我想请问下传递我这种字符串到c中 JNI里要怎么处理让c可以把这个字符串当作十六进制处理,而不是当作单个的字符串处理。我现在处理的是const char *mn = (*env)->GetStringUTFChars(env, mn_emv, 0);把接收到的jstring转成char*,然后赋值给一个char[],但是没法识别成十六进制,所以赋值结果成了char[0]='\';char[1]='0'这种,而我需要的是char[0]=0x6F这样的结果、。

解决方案 »

  1.   

    我已经改用byte[]数组传递,已经解决了。但是我回传又遇到问题了,帮忙分析下。
    JNIEXPORT jobject JNICALL Java_com_test_Emv_getStu(JNIEnv *env, jobject obj) {
    jclass clazz = (*env)->FindClass(env, "com/test/Student");
    jmethodID constrocMID = (*env)->GetMethodID(env, clazz, "<init>",
    "(ILjava/lang/String;)V");
    char* response = "\x01\xA1";
    int size = strlen(response);
    jbyteArray ret = (*env)->NewByteArray(env, size);
    (*env)->SetByteArrayRegion(env, ret, 0, size, (jbyte*) response);
    jobject param_obj = (*env)->NewObject(env, clazz, constrocMID, 11, ret);
    return param_obj;
    }我需要返回一个对象,对象里有一个byte[]的属性,我上面是另外写的一个测试代码。我这里每次运行到最后一步, jobject param_obj = (*env)->NewObject(env, clazz, constrocMID, 11, ret);
    就异常了。请问我哪里写错了?
      

  2.   

    public class Student {
    public int age;
    public byte[] code; public Student() { } public Student(int str, byte[] buff) {
    this.age = str;
    this.code = buff;
    }
    }这是对应的javaBean
      

  3.   

    为什么调用的时候(*env)前面老是多个*
      

  4.   

    问题解决了。是我构造函数的签名写错了。
    那个*是C和C++的语法不一样吧、C++里直接env就好了。C的要用(*env)