Pasar de char* a string pérdida de datos

Iniciado por Kaxperday, 6 Noviembre 2015, 11:01 AM

0 Miembros y 1 Visitante están viendo este tema.

ivancea96

El write en un archivo binario, escribe todos los bytes que le envíes. Para más información, consulta los métodos en una referencia de C++.

Kaxperday

Cita de: ivancea96 en  8 Noviembre 2015, 13:50 PM
El write en un archivo binario, escribe todos los bytes que le envíes. Para más información, consulta los métodos en una referencia de C++.

Escribe char* es lo que recibe como argumento, y al pasar u_char* a char* se corta en el primer \0, luego escribe hasta el primer \0:

Código (cpp) [Seleccionar]
void almacen::escribir(datos _datos)
{
ofstream archivo;
archivo.open(directorio, ofstream::app | ofstream::binary);
_datos = encriptador.encriptar_AES(_datos);
archivo.write(reinterpret_cast<char*>(_datos.contenido), _datos.tamaño);
//archivo.write(string((char*)_datos.contenido, _datos.tamaño).c_str(), _datos.tamaño);
archivo.close();
}


Si hay un byte nulo a la mitad, escribe solo la mitad independientemente de el tamaño que ponga en el segundo argumento, ¿me equivoco?.

Saludos.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

ivancea96

ostream::write escribe bytes, cogiendo como fuente el puntero del primer argumento, y escribe tantos bytes como le envías en el segundo argumento.
Olvídate del caracter nulo. El caracter nulo solo sirve para texto. No estás trabajando texto, el caracter nulo no existe ya para ti. No son caracteres lo que escribes, son datos, son bytes, y la forma que tienen los métodos y funciones de saber el tamaño de los bufferes que les pasas, es dándoselo tú.

Kaxperday

okey ya te comentaré como me va, pero creo que no me escribía lo que le ordenaba, ya probaré de nuevo, gracias.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.