看板 C_and_CPP 關於我們 聯絡資訊
: 標題: [問題] c讀取非文字檔,輸出add,16進制,ASCII : 時間: Mon Jul 5 22:18:07 2010 : : : 遇到的問題: (題意請描述清楚) : : 現在已經寫出來可以讀取文字檔(.TXT之類的) : : : 但要如何修改才也能夠讀取非文字檔(.exe之類) : 現在讀取非文字檔都會出現亂碼~"~ : : 希望得到的正確結果: : 下面是讀取文字檔的輸出結果 : : : address 16進制碼 ASCII : : 00000010 70 72 30 30 30 30 30 30 30 30 30 30 30 30 30 30 pr00000000000000 : 00000020 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0000000000000000 : 00000030 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0000000000000000 : : 程式跑出來的錯誤結果: : : 讀取非文字檔..16進制跟ASCII那都會跑出亂碼或怪東西 讀取非文字檔使用推文內教的rb去讀取 但還是一樣..16進制那會跑出FFFFFFAB<<類似這種一大串東西(用%02X輸出的) ASCII會跑出亂碼(用%c輸出) 跟正確程式比對後發現我的都會跑出FFFFFF**,而且ASCII那還有亂碼 正確的只會顯示 **,ASCII不會出現亂碼 : : 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) : : VC++ : : 有問題的code: (請善用置底文標色功能): int re; struct clientdata client; // 你的struct clientdata真的剛剛好16-byte嗎? // 有byte alignment嗎? printf("File name : "); scanf("%12s", filename ); /* 讀取輸入檔名 */ fp = fopen( filename, "rb"); if( fp == NULL ) /* 判斷是否開啟成功 */ printf("Cannot open \n",filename); ^ 少寫 %s ? else { while(!feof(fp)) { /* 判斷檔案內有無資料 */ //struct clientdata client={""}; /* 清空陣列 */ memset(&client, 0, sizeof(struct clientdata)); re = fread(&client,sizeof(struct clientdata),1,fp);/* 讀取字元 */ //if(client.ch !=0) // 確定有讀這麼多size if(re == sizeof(struct clientdata)) { printf("%07X0 ",index); /* 輸出address */ for(i=0;i<16;i++) { printf("%02X ", (char)client.ch[i]);/* 輸出16進制碼 */ // ch[]是char形態嗎? } /* end for */ for(i=0;i<16;i++) { if (isprint(client.ch[i])) printf("%c",(char)client.ch[i]); /* 輸出ASCII碼 */ else printf("."); } /* end for */ printf("\n"); } /*end if */ else { printf("fread size error\r\n"); } index=index++; } /* end while */ fclose(fp); : 補充說明: : 目前想到的是會不會要先把檔案內容轉成2進制,再轉成16進制?..似乎挺麻煩的 還是有更好的辦法? 幾進制 應該只差別在顯示吧? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.251.160.61
LPH66:你可以推文 07/06 19:34
leslieha:因為有改寫些code 所以沒推文 07/06 22:29