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; 这个报出了那种提示。我这样赋值有错吗?
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; 这个报出了那种提示。我这样赋值有错吗?
这样可以吧?第二个是char的我才是直接赋值的,但是提示警告了,该怎么写?jni/EmvHandler.c:124:17: warning: assignment makes integer from pointer without a cast [enabled by default]
apn 是jstring型的
const char *apnStr = env->GetStringUTFChars(apn, NULL);
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];试试好使不,不要好使再交流
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类型的属性。