int WJ1608Card_ReadNum(BYTE* byCardNum)

    int st;
    static BYTE byReadNum[8] = {0};

/**********************************读出卡号*********************************/
    st=SLE4442_ReadChar(48,8,byReadNum);
    if(st==0) 
{
    memcpy(byCardNum,byReadNum, 8); 
    return  0 ; 
}
    else return   1;  


/**********************************读出卡型*********************************/
int WJ1608Card_ReadCard(int* iCard)

    int st;
    static  BYTE byReadCard[2] = {0};    st=SLE4442_ReadChar(33,1,byReadCard);
    if(st==0) 
{
    memcpy(iCard,byReadCard, 2); 
    return  0 ; 
}
    else return   1;  

这是两个函数,但我现在想把这两个函数合为int WJ1608Card_ReadNum(int* iCard,BYTE* byCardNum)
return 0时,可以得到iCard,byCardNum

解决方案 »

  1.   

    用memcpy的话,就不需要使用静态变量了int WJ1608Card_ReadNum(int* iCard,BYTE* byCardNum)
    {
      BYTE byReadNum[8];
      int st = SLE4442_ReadChar(48,8,byReadNum); 
      if (st != 0)
        return 1;
      memcpy(byCardNum,byReadNum, 8);
      BYTE byReadCard[2];
      st=SLE4442_ReadChar(33,1,byReadCard);
      if (st == 0)
        memcpy(iCard,byReadCard, 2);
      return st;
    }
      

  2.   

    看程序没什么问题,但我调用的时候iCard返回了错误的值,正确的是8,而现在返回52232
      

  3.   

    st=SLE4442_ReadChar(33,1,byReadCard);
    读出来的时候,byReadCard里是什么内容?
      

  4.   

    单独函数分开读出来是8,可能是int的问题;
    byReadCard里是08
      

  5.   

    BYTE byReadCard[2];
      st=SLE4442_ReadChar(33,1,byReadCard);
      if (st == 0)
        memcpy(iCard,byReadCard, 2); 一般来说,int比2个BYTE要长,int上四个字节(32位系统),因此memcpy(iCard,byReadCard, 2);可能会出错
    这时,可以考虑用*iCard = ....的方式,把byReadCard转换成整数
      

  6.   

    问题似乎是这个,我后来把 byReadCard重新定义就正确了,读出来就是8了, 
    static  BYTE byReadCard[2] = {0};
    楼上,谢谢了