[問題] 16進位資料讀取

看板C_and_CPP (C/C++)作者 (兔子)時間16年前 (2010/03/22 11:20), 編輯推噓3(308)
留言11則, 4人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 一開始使用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

03/22 11:46, , 1F
試不出來, 你要不要貼完整的code與測試資料....@_@"
03/22 11:46, 1F

03/22 12:45, , 2F
是不是開檔要設成 binary file?
03/22 12:45, 2F

03/22 13:01, , 3F
getc方法多了0x20,怎麼會說資料往前位移
03/22 13:01, 3F

03/22 13:08, , 4F
我試過了兩個方法用"r""rt""rb"都試不出問題....
03/22 13:08, 4F

03/22 13:09, , 5F
也做了兩個版本的測資檔, 交叉比對不出個結果~_~
03/22 13:09, 5F

03/22 14:10, , 6F
itox((int)abs(buf[j])/16)... 需要這麼麻煩嗎?
03/22 14:10, 6F

03/22 14:13, , 7F
哈, 小弟我還不知道那個itox哪來的, 後來就把兩行
03/22 14:13, 7F

03/22 14:14, , 8F
cout << 全改用 printf + %02X 了....XD
03/22 14:14, 8F

03/22 14:30, , 9F
對不起三樓 我把兩個寫反了 有0x20的是下面的才對
03/22 14:30, 9F

03/22 14:31, , 10F
猜測因為是讀字元 所以它把0x20=32當空白了
03/22 14:31, 10F

03/22 14:32, , 11F
所以0x09~0x0D也都顯示不出來
03/22 14:32, 11F
文章代碼(AID): #1Bfk84bM (C_and_CPP)
文章代碼(AID): #1Bfk84bM (C_and_CPP)