看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) 一開始使用getc讀取字元轉成16進位 發現資料與ultra edit不符合 有一些資料會被跳過 導致之後的資料往前位移 使用fread讀取 才發現和原來的一樣 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Dev C++ 有問題的code: (請善用置底文標色功能) getc: for (i = 0; i < 24; i++) if ( (c = getc (fp)) == EOF ) return -1; else entry [i] = c; >>3C 20 04 00 80 00 80 38 02 fread: fread(buf,24,1,file); for (int j=0;j<24;j++){ cout << itox((int)abs(buf[j]) / 16); cout << itox((int)abs(buf[j]) % 16) << " "; } >>3C 04 00 80 00 80 38 02 補充說明: -- ◤ __ \__◢◤◢◤ ψhirabbitt ◤ ◢███◣ ◢███◣ 和妳的約定 █████ █████ 不變心的約定 ██ ███ 是變心的約定 ██╱╲ ◥█████◣● 是我和自己的約定╱╱ ◥████ ˇ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.13.127.91
VictorTom:試不出來, 你要不要貼完整的code與測試資料....@_@" 03/22 11:46
ksmrt0123:是不是開檔要設成 binary file? 03/22 12:45
rephansu:getc方法多了0x20,怎麼會說資料往前位移 03/22 13:01
VictorTom:我試過了兩個方法用"r""rt""rb"都試不出問題.... 03/22 13:08
VictorTom:也做了兩個版本的測資檔, 交叉比對不出個結果~_~ 03/22 13:09
ksmrt0123:itox((int)abs(buf[j])/16)... 需要這麼麻煩嗎? 03/22 14:10
VictorTom:哈, 小弟我還不知道那個itox哪來的, 後來就把兩行 03/22 14:13
VictorTom:cout << 全改用 printf + %02X 了....XD 03/22 14:14
hirabbitt:對不起三樓 我把兩個寫反了 有0x20的是下面的才對 03/22 14:30
hirabbitt:猜測因為是讀字元 所以它把0x20=32當空白了 03/22 14:31
hirabbitt:所以0x09~0x0D也都顯示不出來 03/22 14:32