Salve,
mi domandavo se c'era un modo in C++ per impachettare il contenuto di una o più strutture in un unica stringa binaria, mi piacerebbe fare una cosa del genere dopo che ho popolato le seguenti strutture:
Questo perchè vorrei creare un file .wav dove ogni chunk di raw audio data è preceduto dal formato RIFF:codice:#include <windows.h> #include <stdlib.h> const unsigned int STANDARD_WAVEFORMAT_SIZE = 16; struct WAVE_FORMAT { WORD wFormatTag; WORD wChannels; DWORD dwSamplesPerSec; DWORD dwAvgBytesPerSec; WORD wBlockAlign; WORD wBitsPerSample; }; struct RIFF_HEADER { TCHAR szRiffID[4]; // 'R','I','F','F' DWORD dwRiffSize; TCHAR szRiffFormat[4]; // 'W','A','V','E' }; struct FMT_BLOCK { TCHAR szFmtID[4]; // 'f','m','t',' ' DWORD dwFmtSize; WAVE_FORMAT wavFormat; }; struct DATA_BLOCK { TCHAR szDataID[4]; // 'd','a','t','a' DWORD dwDataSize; }; void GetARiffChunk(RIFF_HEADER& rh); void GetADataBlock(DATA_BLOCK& db); void GetAWaveFormat(WAVE_FORMAT& wf); void GetAFmtBlock(FMT_BLOCK& fb); void main() { RIFF_HEADER rh; FMT_BLOCK fb; DATA_BLOCK db; GetARiffChunk(rh); GetAFmtBlock(fb); GetADataBlock(db); // impachetta le strutture appena popolate system("pause"); } void GetARiffChunk(RIFF_HEADER& rh) { rh.dwRiffSize = sizeof(rh); rh.szRiffID[0] = 'R'; rh.szRiffID[1] = 'I'; rh.szRiffID[2] = 'F'; rh.szRiffID[3] = 'F'; // Lets add the wave tag id. rh.szRiffFormat[0] = 'W'; rh.szRiffFormat[1] = 'A'; rh.szRiffFormat[2] = 'V'; rh.szRiffFormat[3] = 'E'; rh.dwRiffSize = sizeof(rh); }; void GetADataBlock(DATA_BLOCK& db) { db.szDataID[0] = 'd'; db.szDataID[1] = 'a'; db.szDataID[2] = 't'; db.szDataID[3] = 'a'; db.dwDataSize = 4096; } void GetAWaveFormat(WAVE_FORMAT& wf) { wf.dwAvgBytesPerSec = 0; wf.dwSamplesPerSec = 0; wf.wBitsPerSample = 0; wf.wBlockAlign = 0; wf.wChannels = 0; wf.wFormatTag = 1; } void GetAFmtBlock(FMT_BLOCK& fb) { WAVE_FORMAT wf; GetAWaveFormat(wf); fb.szFmtID[0] = 'f'; fb.szFmtID[1] = 'm'; fb.szFmtID[2] = 't'; fb.szFmtID[3] = ' '; fb.wavFormat = wf; fb.dwFmtSize = sizeof(fb); }
http://www.codeguru.com/cpp/g-m/mult...cle.php/c8935/
grazie



Rispondi quotando