2010-11-24 36 views

Respuesta

18

por qué no usar un std::vector, para empezar:

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

James McNellis respuesta es mejor si puede hacerlo así.

+11

A pesar de que la respuesta de James fomenta un mejor código, esta es la respuesta correcta a la pregunta. A veces simplemente tienes un char * para empezar. – enobayram

3

No se puede convertir entre un char * y un vector; el puntero de conversión hace que el resultado tenga los mismos bytes exactos que la entrada, por lo que generalmente es una mala idea a menos que esté haciendo una manipulación de bits de bajo nivel.

Suponiendo que desea construir un vector de caracteres, puede crear un nuevo vector de tipo std::vector<char> (tenga en cuenta que debe proporcionar el tipo de elementos del vector) y inicializarlo desde la matriz pasando el inicio y punteros fin al constructor:

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

en cuenta que el segundo argumento es un "puntero del fin", muy común en C++. Es importante destacar que es un puntero al carácter después de al final del búfer, no es el último carácter en el búfer. En otras palabras, el comienzo es inclusivo pero el final es exclusivo.

Otra posibilidad (ya que se trata de caracteres) es utilizar un std::string en su lugar. Esto puede o no ser lo que quiera (dependiendo de si está pensando en el carácter * como una cadena o una matriz de bytes). Se puede construir de la misma manera:

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

o con un constructor diferente, teniendo el tamaño como el segundo argumento:

std::string str(buffer, lSize);