[問題] 計算wav的檔案大小

看板C_and_CPP作者 (科科)時間15年前 (2011/02/13 19:20), 編輯推噓2(2012)
留言14則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) visual c/c++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我已經把wave檔的format看過了,但是他size的地方型態是dword(應該就是long int 吧?)。我的做法是把檔案寫到char形態裡面,原本想用atoi,但是因為內容已經不是 數字型態了所以轉不過來。想請問是否有其他做法或是型態轉換的方法。google搜尋 過了,但都大多沒有這部分的資料,少部分的理解困難~_~。 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) mWave mv; ifstream iWave; char bufferTmp[4]; iWave.open("WindowsEnd.wav",ios::in|ios::binary); iWave.read(mv.wHeader.wStyle,4); iWave.read(bufferTmp,4); mv.wHeader.wSize = atoi(bufferTmp); iWave.read(mv.wHeader.wFormat,4); iWave.close(); 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.67.64

02/13 19:23, , 1F
老實說不太懂你的問題, 既然你知道wav的format型態了,
02/13 19:23, 1F

02/13 19:23, , 2F
也知道size是從第某個byte開始的一組dword, 那你讀檔的
02/13 19:23, 2F

02/13 19:24, , 3F
時候直接用binary方式讀那個dword, 或者寫檔的時候在那
02/13 19:24, 3F

02/13 19:25, , 4F
個位址寫入一個dword不就得了?? fread()/fwrite().
02/13 19:25, 4F

02/13 19:27, , 5F
我補一下我的寫法好了
02/13 19:27, 5F
※ 編輯: envy46183 來自: 114.37.67.64 (02/13 19:29)

02/13 19:30, , 6F
我沒有用到fread的部分,如果我以這種寫法能夠完成嗎?
02/13 19:30, 6F

02/13 19:32, , 7F
用 iWave.read(mv.wHeader.wSize, 4); 試試?
02/13 19:32, 7F

02/13 19:32, , 8F
修正 iWave.read(&(mv.wHeader.wSize), 4);
02/13 19:32, 8F

02/13 19:32, , 9F
回去看一下變數定義就被j大搶先了....XD
02/13 19:32, 9F

02/13 19:33, , 10F
我猜wStyle那個大概也要加 & 才行....@_@"
02/13 19:33, 10F

02/13 19:33, , 11F
再修正 iWave.read((char *)&(mv.wHeader.wSize), 4);
02/13 19:33, 11F

02/13 19:34, , 12F
read第一個型態要是char 所以我卡很久~"~
02/13 19:34, 12F

02/13 19:35, , 13F
就是像j大那樣加個轉型就是了:)
02/13 19:35, 13F

02/13 19:36, , 14F
感謝兩位幫忙 問題解決了m(_ _)m
02/13 19:36, 14F
文章代碼(AID): #1DLxvftp (C_and_CPP)