Questa è una sciocchezza: dato che una std::string o un std::vector<char> non sono altro che un array di char allocato sull'heap e incapsulato in una classe, l'accesso ai bytes è veloce esattamente come per gli array di char, dato che tutti i metodi di accesso vengono espansi inline (se si compila con le ottimizzazioni attive), e i controlli sugli indici sono attivi solo se lo chiedi (usando at() invece dell'operatore []).In sostanza: in assoluto un array di char è più veloce ma in realtà la scelta va valutata più cautamente
Inoltre, a differenza degli array di char, hai a disposizione un sacco di metodi comodi, la gestione automatica della memoria, una semantica di copia ben definita e un sacco di altre comodità.
Il mio consiglio quindi è di usare assolutamente un std::vector<unsigned char>; unsigned non è strettamente necessario, ma è pratica comune usare degli unsigned char per dati binari, in genere ti consentono di risparmiare qualche cast qua e là nel codice.
Eviterei std::string non per motivi di performance, ma perché dà a chi legge il codice l'impressione che si stia lavorando con del testo, quando in realtà si tratta di dati binari.

Rispondi quotando