作者hirabbitt (兔子)
看板C_and_CPP
標題[問題] 16進位資料讀取
時間Mon Mar 22 11:20:34 2010
遇到的問題: (題意請描述清楚)
一開始使用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