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:
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.