Re: [問題] c讀取非文字檔,輸出add,16進制,ASCII

看板C_and_CPP作者 (小志)時間15年前 (2010/07/06 18:45), 編輯推噓4(4020)
留言24則, 3人參與, 最新討論串2/3 (看更多)
※ 引述《steven0315 (小志)》之銘言: : 標題: [問題] 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: (請善用置底文標色功能): http://nopaste.info/ecaad14745.html : 補充說明: : 目前想到的是會不會要先把檔案內容轉成2進制,再轉成16進制?..似乎挺麻煩的 還是有更好的辦法? : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 124.8.17.106 : → leslieha:"rb" ? 07/05 22:18 : → loveme00835:應該是一樓講的問題, 用二進位格式來讀應該就可以了 07/05 22:26 : → steven0315:感謝一F,我再來試看看 07/05 22:29 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.8.4.139

07/06 18:49, , 1F
轉2進制再轉16進制?? 進制轉換只是顯示出來的文字與我們
07/06 18:49, 1F

07/06 18:50, , 2F
自己換算時方便的base, 對電腦來說是一樣的; 會不同的是
07/06 18:50, 2F

07/06 18:51, , 3F
數值或文字, Ex: int c=3; 與 int c='3'; c為不同的值;
07/06 18:51, 3F

07/06 18:51, , 4F
int c=15; int c=0xF; 這兩個結果的c值其實一模一樣....
07/06 18:51, 4F

07/06 18:52, , 5F
建議您把code直接貼出來, 感覺是輸出位數的問題....@_@"
07/06 18:52, 5F

07/06 18:55, , 6F
順便一問, 正確的是指和什麼比?? UltraEdit等軟體比嗎?
07/06 18:55, 6F
※ 編輯: steven0315 來自: 124.8.4.139 (07/06 18:57)

07/06 18:58, , 7F
差不多與UltraEdit一樣,只是程式是老大丟給我參考的
07/06 18:58, 7F

07/06 18:58, , 8F
我把code貼上去了,麻煩指教一下了^^
07/06 18:58, 8F

07/06 19:02, , 9F
有點亂, 您要不要用置底的貼code網站貼看看; 另外剛想到
07/06 19:02, 9F

07/06 19:03, , 10F
讀data有用unsigned type來讀/印嗎?? 印出一堆FF應該是
07/06 19:03, 10F

07/06 19:03, , 11F
讀到數值在signed為負值的case, 用unsigned type應該可
07/06 19:03, 11F

07/06 19:04, , 12F
以解決印出多餘的FF的數值; 但是亂碼的部份要再比比看@@
07/06 19:04, 12F
※ 編輯: steven0315 來自: 124.8.4.139 (07/06 19:08)

07/06 19:07, , 13F
printf("%02X ", client.ch[i]&0xff ); 試試
07/06 19:07, 13F

07/06 19:08, , 14F
我把code貼上網了..在內文
07/06 19:08, 14F

07/06 19:12, , 15F
printf("%02X ", client.ch[i]&0xff );16進制可以了耶!
07/06 19:12, 15F

07/06 19:13, , 16F
&0xFF可以是因為把負值的high bit & 掉了吧?? 看起來
07/06 19:13, 16F

07/06 19:13, , 17F
但ASCII還是有亂碼出現
07/06 19:13, 17F

07/06 19:14, , 18F
ch[i]是char型態, 其實應該換成unsigned char也可以@_@"
07/06 19:14, 18F

07/06 19:14, , 19F
ASCII會有亂碼是看OS語系的關係吧?? 我用UE開個binary也
07/06 19:14, 19F

07/06 19:15, , 20F
難免會有亂碼啊@_@"
07/06 19:15, 20F

07/06 19:23, , 21F
另外, index = index++; 這一行應該會有問題....XD
07/06 19:23, 21F

07/06 19:24, , 22F
把上面這個index修掉, 與ch[]用unsigned char宣告, 應該
07/06 19:24, 22F

07/06 19:25, , 23F
就OK了, 至少這邊用Dev-C++測過, 看起來都沒問題了:)
07/06 19:25, 23F

07/06 23:49, , 24F
太感謝了..我再照上面的翻翻書研究一下
07/06 23:49, 24F
文章代碼(AID): #1CCmbLnv (C_and_CPP)
文章代碼(AID): #1CCmbLnv (C_and_CPP)