har FMRead[size=12px]Binary(uchar ProMode, uchar *FileFlag, uchar ReadLen, uchar *KeyData, uchar *RecBuffer, uchar *Rec_len)
{
char status = 0, STATUS = 0;
uchar idata Buffer[8] = {0};
uchar idata Mac[8] = {0};
uchar MfTempBuffer[200];
///ÃüÁÎĺϳÉ
if(ProMode) MfTempBuffer[0] = PICC_READBIN_PRO; //CLA
else MfTempBuffer[0] = PICC_READBIN;
MfTempBuffer[1] = PICC_READ_BINARY; //INS
MfTempBuffer[2] = FileFlag[0]; //P1
MfTempBuffer[3] = FileFlag[1]; //P2
MfTempBuffer[4] = ReadLen;
if(ProMode)
{
///********调试 ******//
MfTempBuffer[4] = 0x04; //Len
memset(Mac, 0, 8); //¼ÓÃÜ
FMGetChallenge(0, Mac, &status); //»ñÈ¡Ëæ»úÊý
memcpy(Buffer, &Mac[2], 4);
memset(&Buffer[4], 0, 4);
SingleMAC(Buffer, MfTempBuffer, 5, KeyData, Mac); //¼ÆËãMAC¼ÓÃÜÂë
memcpy(&MfTempBuffer[5], Mac, 4);
for(status=0; status<8; status++)
{
RecBuffer[status] = Buffer[status];
RecBuffer[status + 8] = Mac[status];
}
memcpy(&RecBuffer[16], MfTempBuffer, 9);
Rec_len[0] = 25;
///**************************////
return 0;
}
status = FMCosCommand(MfTempBuffer, 5, RecBuffer, Rec_len);
return status;
}[/size]
请问上述的包括的调试代码中,我使用单片机发送数据到串口助手上显示,请问我通过for循环给RecBuffer[status] = Buffer[status]; RecBuffer[status + 8] = Mac[status]; 这两个赋值, 然后在 memcpy(&RecBuffer[16], MfTempBuffer, 9);
问题来了,最终显示的数据是,RecBuffer的前9个字节都为0,我觉得是受memcpy(&RecBuffer[16], MfTempBuffer, 9);这个语句的影响,请问我这样做有问题吗?????为什么数组这样子互相影响的?????????
你好,我如果将memcpy(&RecBuffer[16], MfTempBuffer, 9); 注释了,是可以正常的,就是加了memcpy(&RecBuffer[16], MfTempBuffer, 9);这句才会把前面的数据清零的。如果我改成memcpy(&RecBuffer[16], MfTempBuffer, 20); 那么,前20个字节也会清零。