Ответ 1
Почему бы не использовать std::vector
для начала:
std::vector<char> buffer(lSize);
std::fread(&buffer[0], 1, buffer.size(), pFile);
У меня есть переменная char *:
// char* buffer;
// ...
fread (buffer, 1, lSize, pFile);
// ...
Как преобразовать его в std::vector? Кастинг вызовет у меня ошибку.
Почему бы не использовать std::vector
для начала:
std::vector<char> buffer(lSize);
std::fread(&buffer[0], 1, buffer.size(), pFile);
std::vector<char> data(buffer, buffer + size);
Джеймс Макнеллис ответ лучше, если вы можете сделать это так.
Вы не можете использовать между 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);