Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C++] Pack di strutture in una stringa binaria

    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:

    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);
    }
    Questo perchè vorrei creare un file .wav dove ogni chunk di raw audio data è preceduto dal formato RIFF:

    http://www.codeguru.com/cpp/g-m/mult...cle.php/c8935/

    grazie
    Alla batteria dai retta ballA

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    In generale, se accedi alla struttura per indirizzo, la trovi in memoria già impacchettata in binario ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.