作者Ommm5566 (56天團)
看板C_and_CPP
標題[問題] 讀bin可以不要char*或轉uint*能不透過void*嗎?
時間Sun Apr 16 13:52:13 2017
開發平台(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): 另外一個問題是,這樣轉換會不會有什麼風險在?
--
作者: fleece (...) 看板: KoreanPop
標題: [問題] 請問一個叫O.S.T的歌手
時間: Fri Feb 19 12:25:09 2016
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.223.79.239
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1492321939.A.BD0.html
1F:→ hunandy14: 因為你沒有使用正確的語法 reinterpret_cast 04/16 14:10
2F:→ hunandy14: 看起來你並不在意混用cstyle,可以直接(uint32_t*)解決 04/16 14:38
好的 謝謝
※ 編輯: Ommm5566 (61.223.79.239), 04/16/2017 14:53:54
3F:推 s25g5d4: 要注意 little/big endian 問題 04/16 15:35
4F:→ s25g5d4: 前陣子剛好跟你做一樣的事情 我是把 uint32_t 用 htonl 04/16 15:36
5F:→ s25g5d4: 通通轉成 big endian 再 reinterpret_cast 寫進去 04/16 15:36
6F:→ s25g5d4: 不過如果沒有 portable 的需求的話可以忽略這個問題 04/16 15:37
8F:→ hunandy14: 測試的時候懶得打直接寫auto 忘記改回來~明寫較好讀 04/16 15:49
10F:推 s25g5d4: @hunandy14 你的 fileSize 是以 byte 為單位 04/16 23:36
11F:→ s25g5d4: 但是你 call resize 是以 element size 為單位吧? 04/16 23:36
12F:→ hunandy14: 我直接複製原文的,不曉得有什麼不妥呢~ 04/16 23:57
13F:→ hunandy14: 阿我直接開txt測試有補一些語法,發現好像不一樣 04/17 00:02
14F:→ hunandy14: 順手改了,沒注意到呢~是不一樣的 04/17 00:04
15F:→ hunandy14: 不對呀沒看好~仔細看寫法是一樣的~ 04/17 00:14
16F:推 Sidney0503: 讀字不固定大小stackoverflow.com/questions/4850241 04/17 07:15
17F:→ Sidney0503: binary都是01所以是 char 比uint小 04/17 07:16
18F:→ Sidney0503: 讀不會有問題 轉成unsigned int會有問題 04/17 07:17
19F:→ hunandy14: 了解~~ 04/19 02:05