È necessario utilizzare std::vector<unsigned char>
o std::vector<uint8_t>
(se si dispone di un'intestazione moderna stdint.h
). Non c'è niente di sbagliato nell'usare unsigned char[]
o uint8_t[]
se stai lavorando con buffer di dimensioni fisse. Dove std::vector
brilla davvero quando è necessario aumentare o aggiungere frequentemente i buffer. Gli iteratori di STL hanno la stessa semantica dei puntatori, quindi gli algoritmi STL funzioneranno altrettanto bene con std::vector
e con semplici vecchi array.
E come indicato da CAdaker, l'espressione &v[0]
garantisce il puntatore sottostante al buffer del vettore (ed è garantito che sia un blocco di memoria contigua). Questa garanzia è stata aggiunta in un addendum allo standard C++.
Personalmente, eviterei di usare std::string
per manipolare buffer di byte arbitrari, poiché penso che sia potenzialmente confuso, ma non è una pratica inaudita.
fonte
2009-05-07 23:58:15
Duplicato di http://stackoverflow.com/questions/441203/proper-way-to-store-binary-data-with-c-stl –