讀取檔案時,fread所讀取資料與期望不合!? |
缺席
|
hdilwy
初階會員 發表:18 回覆:65 積分:41 註冊:2004-08-31 發送簡訊給我 |
各位先進:
小弟遇到一個奇怪的問題,當我在使用fread時,期望是抓取8byte的資料,並藉由比對找到ppp_cmp_header裡頭的值, 可是在抓取的過程中,並不是每次都是在i=0的時候找到該header,可是期望值是在i=0的時候找到,不知道中間有沒有什麼 邏輯的錯誤,請各位先進不吝賜教。 附檔是測試的檔案。 [code cpp] #include "stdio.h" #include "stdlib.h" #include "math.h" #define DBG_PPP_DATA_PER_GET_LEN2 8 #define DBG_PPP_DATA_BUFFER_LEN 2048 #define byte unsigned char int FIH_ppp_data_to_value(byte *data,int len) { int value = 0; for(int i =0, j = len-1;i<2*len ;i =2,j--) { value = ((data[j]>>4)&0x0F)*pow(16,i 1); value = ((data[j])&0x0F)*pow(16,i); } return value; } void test(void) { FILE* ptr; byte ppp_cmp_header[DBG_PPP_DATA_PER_GET_LEN2] = { 0x02,0x02,0x02,0x02 ,0x02,0x02,0x01,0x01 }; byte pppData[8] = {0}; byte ppp_data_buff[DBG_PPP_DATA_BUFFER_LEN]; byte ppp_data_info_length[2]; int Frame_index = 1,i=0,data_info_len = 0,byte_count = 0,mon = 0; ptr = fopen("test.pcap","rb"); if(ptr != NULL) { while(!feof(ptr)) { mon = fread(&pppData[0],sizeof(byte),DBG_PPP_DATA_PER_GET_LEN2,ptr); byte_count = DBG_PPP_DATA_PER_GET_LEN2; for(i=0;i<8;i ) { if( !memcmp(&pppData[i],&ppp_cmp_header[0],DBG_PPP_DATA_PER_GET_LEN2-i)) { break; } } if(i>=8) continue;//does not find if(i!=0)//header not start from the first byte { fread(&ppp_data_buff[0],sizeof(byte),i,ptr);//ignore data() byte_count = i; } fread(&ppp_data_buff[0],sizeof(byte),DBG_PPP_DATA_PER_GET_LEN2,ptr);//ignore data(8byte) byte_count = DBG_PPP_DATA_PER_GET_LEN2; fread(&ppp_data_info_length[0],sizeof(byte),2,ptr);// 2bytes byte_count = 2; data_info_len = FIH_ppp_data_to_value(&ppp_data_info_length[0],2); fread(&ppp_data_buff[0],data_info_len,sizeof(byte),ptr); byte_count = data_info_len; byte_count = byte_count%8; fread(&ppp_data_buff[0],sizeof(byte),8-byte_count,ptr); Frame_index ; byte_count = 0; memset(ppp_data_buff,0,sizeof(ppp_data_buff)); } fclose(ptr); } else { } } int _tmain(int argc, _TCHAR* argv[]) { test(); system("PAUSE"); return 0; } [/code] |
hdilwy
初階會員 發表:18 回覆:65 積分:41 註冊:2004-08-31 發送簡訊給我 |
各位先進:
小弟已經找到邏輯錯誤的地方, for(i=0;i<8;i ) { } 應改成 for(i=0;i<8;i =2) { } 因為我是要找連續的資料,因為間隔取錯導致之後要抓取的data_info_len也錯誤 ,然後會漏掉幾筆資料,感謝各位先進抽空看我的問題。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |