[問題] 讀bin能不要char或直接轉uint*嗎(已解決)

看板C_and_CPP作者 (56天團)時間7年前 (2017/04/16 13:52), 7年前編輯推噓4(4015)
留言19則, 4人參與, 最新討論串1/1
開發平台(Platform): win or unix 編譯器: C++14 額外使用到的函數庫(Library Used):std 問題(Question): 今天遇到一個API需要使用者自己先讀取好檔案 然後傳大小和uint32_t*進去 但是讀binary檔案得到的好像只能是charstring 所以必須轉換一次( char* -> void* -> uint32_t*) 1. 能夠讀檔的時候就用uint32_t存嗎? 或 2. char*uint32_t*能不透過void*嗎? 餵入的資料(Input): binary file 程式碼(Code): http://cpp.sh/8cs7 補充說明(Supplement): 另外一個問題是,這樣轉換會不會有什麼風險在? -- 作者: fleece (...) 看板: KoreanPop 標題: [問題] 請問一個叫O.S.T的歌手 時間: Fri Feb 19 12:25:09 2016 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.223.79.239 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1492321939.A.BD0.html

04/16 14:10, , 1F
因為你沒有使用正確的語法 reinterpret_cast
04/16 14:10, 1F

04/16 14:38, , 2F
看起來你並不在意混用cstyle,可以直接(uint32_t*)解決
04/16 14:38, 2F
好的 謝謝 ※ 編輯: Ommm5566 (61.223.79.239), 04/16/2017 14:53:54

04/16 15:35, , 3F
要注意 little/big endian 問題
04/16 15:35, 3F

04/16 15:36, , 4F
前陣子剛好跟你做一樣的事情 我是把 uint32_t 用 htonl
04/16 15:36, 4F

04/16 15:36, , 5F
通通轉成 big endian 再 reinterpret_cast 寫進去
04/16 15:36, 5F

04/16 15:37, , 6F
不過如果沒有 portable 的需求的話可以忽略這個問題
04/16 15:37, 6F

04/16 15:46, , 7F
第一個問題可以這樣解決 http://cpp.sh/4kv2n
04/16 15:46, 7F

04/16 15:49, , 8F
測試的時候懶得打直接寫auto 忘記改回來~明寫較好讀
04/16 15:49, 8F

04/16 22:31, , 9F
04/16 22:31, 9F

04/16 23:36, , 10F
@hunandy14 你的 fileSize 是以 byte 為單位
04/16 23:36, 10F

04/16 23:36, , 11F
但是你 call resize 是以 element size 為單位吧?
04/16 23:36, 11F

04/16 23:57, , 12F
我直接複製原文的,不曉得有什麼不妥呢~
04/16 23:57, 12F

04/17 00:02, , 13F
阿我直接開txt測試有補一些語法,發現好像不一樣
04/17 00:02, 13F

04/17 00:04, , 14F
順手改了,沒注意到呢~是不一樣的
04/17 00:04, 14F

04/17 00:14, , 15F
不對呀沒看好~仔細看寫法是一樣的~
04/17 00:14, 15F

04/17 07:15, , 16F
讀字不固定大小stackoverflow.com/questions/4850241
04/17 07:15, 16F

04/17 07:16, , 17F
binary都是01所以是 char 比uint小
04/17 07:16, 17F

04/17 07:17, , 18F
讀不會有問題 轉成unsigned int會有問題
04/17 07:17, 18F

04/19 02:05, , 19F
了解~~
04/19 02:05, 19F
文章代碼(AID): #1OymQJlG (C_and_CPP)