Как преобразовать char * в std::vector?

У меня есть переменная char *:

// char* buffer;
// ...
fread (buffer, 1, lSize, pFile);
// ...

Как преобразовать его в std::vector? Кастинг вызовет у меня ошибку.

Ответы

Ответ 1

Почему бы не использовать std::vector для начала:

std::vector<char> buffer(lSize);
std::fread(&buffer[0], 1, buffer.size(), pFile);

Ответ 2

std::vector<char> data(buffer, buffer + size);

Джеймс Макнеллис ответ лучше, если вы можете сделать это так.

Ответ 3

Вы не можете использовать между char * и вектором; приведение указателя приводит к тому, что результат имеет те же самые байты, что и вход, поэтому, как правило, это плохая идея, если вы не выполняете малоуровневые манипуляции с битами.

Предполагая, что вы хотите создать вектор символов, вы можете создать новый векторный объект типа std::vector<char> (обратите внимание, что вам нужно указать тип векторных элементов) и инициализировать его из массива, передав начало и конечные указатели на конструктор:

std::vector<char> vec(buffer, buffer+lSize);

Обратите внимание, что второй аргумент является "конечным указателем", очень распространенным в С++. Важно отметить, что это указатель на символ после окончания буфера, а не на последний символ в буфере. Другими словами, начало включено, но конец является исключительным.

Другая возможность (поскольку вы имеете дело с символами) заключается в использовании std::string. Это может быть или не быть тем, что вы хотите (в зависимости от того, думаете ли вы о char * как строку или массив байтов). Вы можете построить его таким же образом:

std::string str(buffer, buffer+lSize);

или с другим конструктором, беря размер в качестве второго аргумента:

std::string str(buffer, lSize);