typedef struct{
unsigned char TermId[8];  
unsigned char TerminalType; 
        unsigned long MerchNum;
}EMV_PARAM;
假设我的要引用的第三方库中有这个一个结构体,我在java层的声明:public class EMV_Param {public String termId;
public String terminalType;public int merchNum;
我从java传到C的是一个对象,前2个属性是string,后一个是int。
然后我在C中要把这个值得到赋值到结构体里,我是这样操作的。
EMV_PARAM ep;strcpy(ep.TermId,t_emv);
ep.TerminalType=tt_emv;其中t_emv,tt_emv都是我得到的jstring类型的值。
但是编译的时候,jni/EmvHandler.c:124:17: warning: assignment makes integer from pointer without a cast [enabled by default]

也就是ep.TerminalType=tt_emv; 这个报出了那种提示。我这样赋值有错吗?

解决方案 »

  1.   

    结构体里面第一个是char数组,你直接将jstring赋值吗?
      

  2.   

    char数组的我是这样写的strcpy(ep.TermId,t_emv);
    这样可以吧?第二个是char的我才是直接赋值的,但是提示警告了,该怎么写?jni/EmvHandler.c:124:17: warning: assignment makes integer from pointer without a cast [enabled by default]
      

  3.   

    你是怎么做的? 我看了下gps的jni文件
    apn 是jstring型的
    const char *apnStr = env->GetStringUTFChars(apn, NULL);
      

  4.   


    warning: assignment makes integer from pointer without a cast 这个意思是说你把指针赋值给了整形(C中char就是整形)。所以你要讲java传过来的的jstring转成char,或者直接传过来一个jchar或int。下面是怎么样把jstring转成char的例子:const char *apnStr = env->GetStringUTFChars(t_emv, NULL);
    ep.TerminalType = *apnStr;或者char[] apnStr = env->GetStringUTFChars(t_emv, NULL);
    ep.TerminalType = apnStr[0];试试好使不,不要好使再交流
      

  5.   

    哥,你可能误解了我的意思。你那个写法我知道。我现在想问的是。typedef struct{
    unsigned char TermId[8];  
    unsigned char TerminalType; 
            unsigned long MerchNum;
    }EMV_PARAM;我有这么一个结构体,我在java中是声明的一个对应的实体类对象,每个属性都是string的,我java传到c的参数是这个对象。然后我获取这个对象的每个属性,jclass clazz = (*env)->FindClass(env,"com/imagpay/EMV_Param");
    //获取jfieldID
    jfieldID mn_id = (*env)->GetFieldID(env,clazz, "merchName", "Ljava/lang/String;");jstring mn_emv=(*env)->GetObjectField(env,obj,mn_id);类似这种写法,得到的值都是jstring类型的。然后我要把这些值赋值给这个结构体。
    EMV_PARAM ep;
    strcpy(ep.MerchName,mn_emv);
    strcpy(ep.MerchCateCode,mcc_emv);
    strcpy(ep.MerchId,m_emv);
    strcpy(ep.TermId,t_emv);
    ep.TerminalType=tt_emv;
    结构体函数原型是 unsigned char[]的我使用strcpy函数没报错,结构体函数原型是 unsigned char的,我是直接ep.TerminalType=tt_emv;这样等于赋值,然后就有那个警告了。我想问的是怎么把这个jstring赋值给这个结构体里的类型为unsigned char类型的属性。