当前位置: 代码迷 >> Android >> NDK中JNI结构体的操作有关问题
  详细解决方案

NDK中JNI结构体的操作有关问题

热度:37   发布时间:2016-05-01 10:27:45.0
NDK中JNI结构体的操作问题
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; 这个报出了那种提示。我这样赋值有错吗?

------解决方案--------------------
你是怎么做的? 我看了下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];

试试好使不,不要好使再交流
  相关解决方案