else if(size==10)//10個字節 10進制數 { tempcard=strtoul((const char*)cardnum,0,10);//將 cardnum[0]=tempcard>>24&0x00ff;//最高位 cardnum[1]=tempcard>>16&0x00ff; cardnum[2]=tempcard>>8&0x00ff; cardnum[3]=tempcard&0x00ff; }
上述語句中,使用strtoul()函數,若是cardnum轉化後的超出tempcard(int)的範圍,則tempcard的值爲0xFFFF FFFF ,這樣就致使card[]數組的值全爲0xFF,則與flash中的值一致,刷卡開門成功;數組
解決函數
(1)每次串口接收結尾添加字符串結束符spa
(2)若值爲0xFFFF FFFF,無需與flash存儲內容比較,直接認爲無效數據。code