[問題] 二進位讀檔轉乘int出錯

看板C_and_CPP (C/C++)作者 (輕子)時間12年前 (2014/03/01 00:54), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串1/1
開發平台(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

03/01 04:18, , 1F
你傳進 function 的 type 是 signed char,跟 result
03/01 04:18, 1F

03/01 04:18, , 2F
做 OR 的時候如果 MSB 是 1 會被補 1(比如說 0x94)
03/01 04:18, 2F
後來我發現可以用reinterpret_cast<char *>作非格式化處理比較快 ※ 編輯: Lepton 來自: 140.114.128.223 (03/02 15:49)
文章代碼(AID): #1J4BzDsU (C_and_CPP)
文章代碼(AID): #1J4BzDsU (C_and_CPP)