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);其中t_emv,tt_emv都是我得到的jstring类型的值。
ep.TerminalType=tt_emv;
但是编译的时候,jni/EmvHandler.c:124:17: warning: assignment makes integer from pointer without a cast [enabled by default]
也就是ep.TerminalType=tt_emv; 这个报出了那种提示。我这样赋值有错吗?
------解决方案--------------------
你是怎么做的? 我看了下gps的jni文件
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];
试试好使不,不要好使再交流