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

作者: Ommm5566 (56天團)   2017-04-16 13:52:13
開發平台(Platform): win or unix
編譯器: C++14
額外使用到的函數庫(Library Used):std
問題(Question):
今天遇到一個API需要使用者自己先讀取好檔案
然後傳大小和uint32_t*進去
但是讀binary檔案得到的好像只能是char或string
所以必須轉換一次( char* -> void* -> uint32_t*)
1. 能夠讀檔的時候就用uint32_t存嗎?

2. char*轉uint32_t*能不透過void*嗎?
餵入的資料(Input): binary file
程式碼(Code): http://cpp.sh/8cs7
補充說明(Supplement): 另外一個問題是,這樣轉換會不會有什麼風險在?
作者: hunandy14 (Charlott.HonG)   2017-04-16 14:10:00
因為你沒有使用正確的語法 reinterpret_cast看起來你並不在意混用cstyle,可以直接(uint32_t*)解決
作者: s25g5d4 (function(){})()   2017-04-16 15:35:00
要注意 little/big endian 問題前陣子剛好跟你做一樣的事情 我是把 uint32_t 用 htonl通通轉成 big endian 再 reinterpret_cast 寫進去不過如果沒有 portable 的需求的話可以忽略這個問題
作者: hunandy14 (Charlott.HonG)   2017-04-16 15:46:00
第一個問題可以這樣解決 http://cpp.sh/4kv2n測試的時候懶得打直接寫auto 忘記改回來~明寫較好讀
作者: kokal (細菌)   2017-04-16 22:31:00
作者: s25g5d4 (function(){})()   2017-04-16 23:36:00
@hunandy14 你的 fileSize 是以 byte 為單位但是你 call resize 是以 element size 為單位吧?
作者: hunandy14 (Charlott.HonG)   2017-04-16 23:57:00
我直接複製原文的,不曉得有什麼不妥呢~阿我直接開txt測試有補一些語法,發現好像不一樣順手改了,沒注意到呢~是不一樣的不對呀沒看好~仔細看寫法是一樣的~
作者: Sidney0503 (Sidney0503)   2017-04-17 07:15:00
讀字不固定大小stackoverflow.com/questions/4850241binary都是01所以是 char 比uint小讀不會有問題 轉成unsigned int會有問題
作者: hunandy14 (Charlott.HonG)   2017-04-19 02:05:00
了解~~

Links booklink

Contact Us: admin [ a t ] ucptt.com