online ejemplos descargar definicion caracteristicas c++

c++ - ejemplos - Cómo emitir el vector<unsigned char> a char*



c++ online (4)

Tengo un búfer como este:

vector<unsigned char> buf

¿Cómo puedo lanzarlo a char *?

Si lo hago:

(char *)buf

Me sale este error:

/home/richard/Desktop/richard/client/src/main.cc:102: error: invalid cast from type ‘std::vector<unsigned char, std::allocator<unsigned char> >’ to type ‘char*’

Para aquellos que se preguntan por qué estoy tratando de hacer esto. Necesito pasar el búfer a esta función:

n_sent = sendto(sk,(char *)buf,(int)size,0,(struct sockaddr*) &server,sizeof(server));

Y solo acepta char *.


Es muy poco probable que desee convertir vector<unsigned char> a unsigned char * , pero puede obtener un puntero válido como este:

vector<unsigned char> v; unsigned char *p = &*v.begin();

Esa extraña expresión le dará el puntero al inicio de la matriz asignada interna creada por el vector. Si modificas el vector, puede que ya no sea válido.

El motivo de la búsqueda redundante &* es que el * es realmente operator * en el iterador devuelto por v.begin() . Eso devuelve una referencia al primer carácter de la matriz de la que puede tomar la dirección con & .


Tratar

(char *)(&buf[0])

u otro, más cast C ++. Pero también dinos para qué estás usando esto. Puede ser una mala idea


reinterpret_cast<char*> (&buf[0]);

El vector garantiza que sus elementos ocupan memoria contigua. Entonces, los "datos" que busca son en realidad la dirección del primer elemento (tenga cuidado con el vector <bool> , este truco fallará con él). Además, ¿por qué su vector<char> búfer no es vector<char> para que no necesite reinterpretar_cast?

Actualización para C ++ 11

reinterpret_cast<char*>(buf.data());


reinterpret_cast<char*>(buf.data());