Powinieneś użyć std::vector<unsigned char>
lub std::vector<uint8_t>
(jeśli masz nowoczesny nagłówek stdint.h
). Nie ma nic złego w korzystaniu z unsigned char[]
lub uint8_t[]
, jeśli pracujesz z buforami o stałym rozmiarze. Gdzie naprawdę świeci std::vector
, gdy trzeba często się powiększać lub dołączać do buforów. Iteratory STL mają tę samą semantykę co wskaźniki, więc algorytmy STL będą działać równie dobrze z std::vector
i zwykłymi starymi tablicami.
I jak zauważył CAdaker, wyrażenie &v[0]
gwarantuje podanie podstawowego wskaźnika do bufora wektora (i gwarantuje, że będzie to jeden ciągły blok pamięci). Ta gwarancja została dodana w addendum do standardu C++.
Osobiście nie użyłbym std::string
do manipulowania arbitralnymi buforami bajtów, ponieważ uważam, że jest to potencjalnie mylące, ale nie jest to niesłychana praktyka.
Duplikat http://stackoverflow.com/questions/441203/proper-way-to-store-binary-data-with-c-stl –