elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Registros ASCII con valores binarios en el medio
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Registros ASCII con valores binarios en el medio  (Leído 5,779 veces)
Xedrox

Desconectado Desconectado

Mensajes: 274



Ver Perfil
Registros ASCII con valores binarios en el medio
« en: 13 Octubre 2012, 07:49 am »

Buenas gente,

   Les hago una consulta, estoy tratando de generar un archivo binario que tiene masomenos la siguiente estructura por cada registro

242 caracteres ascci 8 numeros (long long cada uno) 273 caracteres ascci e insertar un salto de linea.


Código:
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

/* Defino la estructura*/
struct tipoRegistro
{
   char pri[242];
   long long num1;
   long long num2;
   long long num3;
   long long num4;
   long long num5;
   long long num6;
   long long num7;
   long long num8;
   char ter[273];
};

int main()
{


   tipoRegistro tran;
   
 
   ofstream fsalida("TEMP", ios::out | ios::binary);
   
 
   
   
   strcpy(tran.pri,"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
   
 
   
   tran.num1=0;
   tran.num2=0;
   tran.num3=0;
   tran.num4=0;
   tran.num5=0;
   tran.num6=0;
   tran.num7=0;
   tran.num8=0;
   
   
 
   
   strcpy(tran.ter,"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");
   
 

   cout << sizeof(tipoRegistro) << endl;
   
   fsalida.write(reinterpret_cast<char *>(&tran), sizeof(tipoRegistro));
   fsalida.close();

   return 0;
}




Los porblemas son los siguientes

1) Como puedo poner el salto de linea? Siempre me sale todo seguido, y necesito el salto de linea porque asi lo va leer otra aplicacion. Asi como esta ahora genera un registro a continuacion del otro, y con '\n' no funciona.

2) Cuando abro el archivo con notepad, veo caracteres binarios al final del registro :S, no se de donde salen.

Muchas Gracias!
Saludos!


En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Registros ASCII con valores binarios en el medio
« Respuesta #1 en: 13 Octubre 2012, 09:27 am »

¡Buenas!

Para lo que quieres hacer tendras que usar archivos de texto, no binarios.

¡Saludos!


En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Xedrox

Desconectado Desconectado

Mensajes: 274



Ver Perfil
Re: Registros ASCII con valores binarios en el medio
« Respuesta #2 en: 13 Octubre 2012, 09:35 am »

No, necesitos grabar los importes en binarios, no en ASCII.
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Registros ASCII con valores binarios en el medio
« Respuesta #3 en: 13 Octubre 2012, 11:47 am »

1) Como puedo poner el salto de linea? Siempre me sale todo seguido, y necesito el salto de linea porque asi lo va leer otra aplicacion. Asi como esta ahora genera un registro a continuacion del otro, y con '\n' no funciona.

Si dentro de la cadena del struct pones un salto de linea y abres el fichero con un editor de texto, el salto de linea estara ahi.

Si quieres insertar un salto de linea despues de cada registro, tendras que usar evidentemente un caracter cuyo valor sea un salto de linea, y escribirlo en el fichero convirtiendolo a una cadena.

De todas todas tiene que funcionar.

2) Cuando abro el archivo con notepad, veo caracteres binarios al final del registro :S, no se de donde salen.

Como estas utilizando un fichero binario, escribes todo el bloque de memoria del struct, de ahi salen los datos que no quieres que salgan, de las posiciones no inicalizadas del vector de caracteres.

Mas informacion, tambien se añadiran (posiblemente) bytes intermedios y al final segun la alineacion entre campos que maneje tu compilador.

Y te sigo diciendo lo mismo, si quieres ver la informacion "bonita" con tu editor de texto, tendras que dar salida con formato (modo texto) a los datos, sino, si manejas bloques de memoria porque te hace falta utilizar ficheros binarios, no pretendas que la informacion quede "bonita".

¡Saludos!
« Última modificación: 13 Octubre 2012, 12:06 pm por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Xedrox

Desconectado Desconectado

Mensajes: 274



Ver Perfil
Re: Registros ASCII con valores binarios en el medio
« Respuesta #4 en: 14 Octubre 2012, 04:39 am »

Podrias aplicar las correcciones que dices a mi codigo? No quiero la informacion bonita, lo necesito asi porque es un archivo que lee otra aplicacion.
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Registros ASCII con valores binarios en el medio
« Respuesta #5 en: 14 Octubre 2012, 09:52 am »

No hay nada que corregir. Lo unico que tienes que hacer es leer los registros con la segunda aplicacion. Eso si, asegurate de compilar tambien el programa que lee el fichero con el mismo compilador que el que lo crea, asi te aseguras de que los tamaños de los datos y la alineacion de los campos del struct sean los mismos.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Xedrox

Desconectado Desconectado

Mensajes: 274



Ver Perfil
Re: Registros ASCII con valores binarios en el medio
« Respuesta #6 en: 14 Octubre 2012, 21:20 pm »

No tengo acceso a los fuentes de la otra aplicacion, y me rechaza el archivo por los problemas que enuncio en el primer mensaje.

Empezemos de vuelta, supongamos que necesito crear un archivo con una palabra ASCII al principio, seguido por dos numero en formato long long y por ultimo una palabra ASCCI y el salto de linea. Como podria corregir mi programa?
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Registros ASCII con valores binarios en el medio
« Respuesta #7 en: 15 Octubre 2012, 15:15 pm »

¿Añadiendo un caracter como miembro del struct e inicalizandolo con un salto de linea?

¿Escribiendo en el archivo un caracter salto de linea despues de escribir el struct?

De todas formas, asgurate de que si vas a leer o escribir en un fichero que maneja otro programa, lo hagas con datos del mismo tamaño.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Xedrox

Desconectado Desconectado

Mensajes: 274



Ver Perfil
Re: Registros ASCII con valores binarios en el medio
« Respuesta #8 en: 20 Octubre 2012, 06:26 am »

Por favor podrias modificar mi programa anterior con algun ejemplo sencillo para hacer como lo enuncias? Ahora no tengo acceso a mi PC pero si me pasas el ejemplo cuando lo tenga podre probarlo y no fallar 100 veces como hasta ahora  :-X. El ejemplo sencillo seria como el mensaje anterior mio.

Desde ya muchas gracias!
En línea

Xedrox

Desconectado Desconectado

Mensajes: 274



Ver Perfil
Re: Registros ASCII con valores binarios en el medio
« Respuesta #9 en: 26 Octubre 2012, 03:42 am »

Elevate post!
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines