看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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)