作者Lepton (輕子)
看板C_and_CPP
標題[問題] 二進位讀檔轉乘int出錯
時間Sat Mar 1 00:54:32 2014
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC2012
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
無
問題(Question):
我有一個二進位的檔案要把資料讀進來轉乘uint或int
我的做法是先用char[4]把資料抓出來後
再用 or << 來做成int或uint的資料
可是再讀檔的時候有些資料會跟原本的資料不一樣
餵入的資料(Input):
http://webhex.net/view/8fd894f9ae6ae76b2aef3ce5a9d4451f
預期的正確結果(Expected Output):
二進位檔頭幾行用16進位表示
00 02 00 00 23 00 00 00 00 00 02 94 0B 00 40 14
錯誤結果(Wrong Output):
00 20 00 00 23 00 00 00 ff ff ff 94 0b 00 40 14
^^ ^^ ^^
後面繼續讀下去的話還會有錯誤的資料,可是想不出來是為什麼
程式碼(Code):(請善用置底文網頁, 記得排版)
http://codepad.org/X9twQjEt
補充說明(Supplement):
組合int或uint是用逐位元的運算應該跟宣告的型態無關
因此我研判是read(c,4)的步驟就出錯,但我實在找不知來為什麼錯
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.201.34
推 keeper7478:你傳進 function 的 type 是 signed char,跟 result 03/01 04:18
→ keeper7478:做 OR 的時候如果 MSB 是 1 會被補 1(比如說 0x94) 03/01 04:18
後來我發現可以用reinterpret_cast<char *>作非格式化處理比較快
※ 編輯: Lepton 來自: 140.114.128.223 (03/02 15:49)