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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con archivo binario, por favor.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con archivo binario, por favor.  (Leído 7,294 veces)
carlosguay

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Ayuda con archivo binario, por favor.
« en: 20 Abril 2011, 18:41 pm »

Pues tengo un problema algo raro, y esque tengo la cabeza echa polvo de las vueltas que le e dado, xd, a ver si alguien fuera tan amable de resolverme este problema, que seguro sera una tonteria, pero ya me rindo de las vueltas que le e dado.

Mejor una imagen.




Lo de arriba es la salida de pantalla de consola, y lo de abajo es el archivo ya creado, como podeis ver, me invierte los bytes, xd, esta es la forma que escribo en el archivo.

Código
  1. fwrite( (unsigned char*) &data, 1, sizeof(data), fd);

Los datos que salen por consola, son exactamente los que necesito ir metiendo en el archivo, osea que sacarlos los saca bien, es a la hora de escribirlo en el archivo bin, donde no hay manera.

Pues a ver si me podeis echar una manita, por favor.

gracias y saludos.


En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: Ayuda con archivo binario, por favor.
« Respuesta #1 en: 20 Abril 2011, 22:16 pm »

en el archivo se esta escribiendo bien, lo que ocurre es que lo imprimes por pantalla en grupos de 4 bytes. Y la CPU lee de derecha a izquierda, siendo los primeros los de mas bajo valor (little-endian)


En línea

carlosguay

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: Ayuda con archivo binario, por favor.
« Respuesta #2 en: 21 Abril 2011, 13:42 pm »

Te agradezco la respuesta y la informacion, que por cierto no la sabia, xd, pero creo que ahora estoy mas liado que antes, jejejje.

Te explico mas detalladamente, y a ver si me entero de una vez, veras yo creo que es el archivo lo que esta mal, ya que yo tengo un programa que mete los bytes dentro del chip-micro, al que yo se los saco, por medio del puerto paralelo.

Ese programa que te comento, hace bien su trabajo, ya que no lo e hecho yo, jejeje, lo que yo estoy haciendo es leer lo que antes le e escrito, como te digo com otro programa, y el archivo que le escribo es exactamente igual que la salida de pantalla=consola que te puse antes, mira.






Como ves, el archivo bin creado, tiene que ser como el de arriba, yo siguiendo lo que tu comentas, me inclinaria mas, porque la salida de consola, fuera la que estubiera mal, y hay es donde los bytes deberian de ir invertidos.

En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: Ayuda con archivo binario, por favor.
« Respuesta #3 en: 21 Abril 2011, 14:19 pm »

lo que tu le metes al chip lo guardas en un archivo antes de escribirlo?
Puede ser que ese chip tenga otro orden de bytes diferente. y el otro programa haga una traducción al pasarlo por la consola.
En línea

carlosguay

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: Ayuda con archivo binario, por favor.
« Respuesta #4 en: 21 Abril 2011, 19:09 pm »

Que va, eso no creo que lo haga el programa, y si hace lo que tu dices, al leer el chip, porque ese programa tambien lee, creaira el archivo igual que mi programa, entiendes?

Habria alguna forma de invertir los bytes a la hora de escribirlos en el archivo?, osea  si leo 00112233, escribirlo igual en el archivo, hacer una espera o algo, para que no escriba 33221100, me explico, o que escriba de 4 en 4 bytes.

El archivo, tiene que quedar como el que te e puesto arriba y como sale por consola, que por cierto, alomejor se podria hacer algo para que me irviertiera los bytes antes de escribirlos en el archivo, no?, alomejor es mas facil eso.

Edito para poner esto.

Me acobo de hacer esta funcion en visual basic, que es de lo que yo se, pero como veras muy poquito claro, mira.
Código
  1.  
  2. Dim a As String
  3. Dim b As String
  4. Dim c As String
  5. Dim d As String
  6. Dim data As String
  7.  
  8. a = Text1
  9. b = Text2
  10. c = Text3
  11. d = Text4
  12. data = a & b & c & d
  13.  
  14. If data <> "" = False Then
  15. End
  16.  
  17. Else
  18. data = d & c & b & a
  19. Text5 = data
  20.  
  21. End If


Y hace lo que tenemos que conseguir, bueno es lo que necesito que me expliques, claro, porque yo de C, nada de nada, xd.



Yo creo que si eso, lo hiciera con el data=4bytes, antes de subirlo al archivo, pues tendria lo que necesito.
« Última modificación: 21 Abril 2011, 20:34 pm por carlosguay » En línea

Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Re: Ayuda con archivo binario, por favor.
« Respuesta #5 en: 22 Abril 2011, 09:20 am »

lee y escribe de a bytes y no de a 4 bytes, con eso te aseguras copiar el contenido exactamente igual.

S2
En línea

carlosguay

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: Ayuda con archivo binario, por favor.
« Respuesta #6 en: 22 Abril 2011, 09:52 am »

lee y escribe de a bytes y no de a 4 bytes, con eso te aseguras copiar el contenido exactamente igual.

S2


Si eso seria una solucion, que seguro funcionaria, pero uno de los chip=micros, que tengo que leer, tiene 8 megas y leyendo de 4 en 4, tarda sobre 50 minutos, osea que al leer de byte en byte, pues seria un aburrimiento, xd.

Llevo dos semanas, con esta tonteria parado, a ver si alguien pudiera explicarme como hacer lo que yo e puesto  en visual, pero para C, ya que creo que con eso solucionaria el problema.
En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: Ayuda con archivo binario, por favor.
« Respuesta #7 en: 22 Abril 2011, 11:18 am »

si quieres invertirlos haz algo así:
Código
  1. long Numero = 0x01020304;//Este es el numero que vamos a invertir
  2. long Invertido = 0;//Lo guardaremos aqui
  3.  
  4. //Cojo la direccion de la variable con & y ago un cast de tipos con (char*)
  5. //para que lo interprete como un array de bytes;
  6. //[X] es el indice del array que siempre empieza en zero; Un long tiene 4 bytes por lo que el mayor indice seria 3 y el menor 0
  7. ((char*)&Invertido)[0] = ((char*)&Numero)[3];
  8. ((char*)&Invertido)[1] = ((char*)&Numero)[2];
  9. ((char*)&Invertido)[2] = ((char*)&Numero)[1];
  10. ((char*)&Invertido)[3] = ((char*)&Numero)[0];
  11.  
  12. printf("Numero %X Invertido %X\n",Numero,Invertido);
  13.  

Lo de leerlos de 4 en 4 o de 1 en 1 solo debería de tener importancia al mostrarlos por pantalla, en el archivo se van a guardar igual porque no modificas lo que recibes, solo afecta a la forma de interpretar el numero.(Lectura)
« Última modificación: 22 Abril 2011, 11:27 am por Arcangel_0x7C5 » En línea

carlosguay

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: Ayuda con archivo binario, por favor.
« Respuesta #8 en: 22 Abril 2011, 12:54 pm »



Lo de leerlos de 4 en 4 o de 1 en 1 solo debería de tener importancia al mostrarlos por pantalla, en el archivo se van a guardar igual porque no modificas lo que recibes, solo afecta a la forma de interpretar el numero.(Lectura)



Si esto fuera como dices, seria la mejor solucion, a ver si soy capaz de modificar el codigo que tengo en C, para que lea de 1 en 1, y si no entonces añadirle este que me pones, ya contare resultados, gracias amigo.
En línea

carlosguay

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: Ayuda con archivo binario, por favor.
« Respuesta #9 en: 22 Abril 2011, 21:19 pm »

Pues no soy capaz de conseguirlo, esto me esta volviendo loco, :P , si cambio la opcion de leer en vez de 4 a 1, que por cierto creo que sera esto.

Código
  1. if ( addr & 0x2 )  data = (data>>16)&0xffff ;
  2.  else               data = (data&0x0000ffff) ;

Como el programa, necesita activar el chip, para escritura o lectura, y supongo que por eso lee de 4 en 4, pues se queda parado hay, y ya no sigue, xd.

Poniendo la funcion que me as pasado, funciona casi bien, creo que al invertirlos tan rapido, se come bastantes bytes, sobre todo ceros.

Si hubiera una forma de escribir en el archivo, de 4 en 4, modificando esto.

Código
  1. fwrite( (unsigned char*) &data, 1, sizeof(data), fd);

Si no, yo ya no se que mas hacer, esto me a ganado ,xd.
En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Listar archivo binario
Programación C/C++
Teby45 0 2,019 Último mensaje 17 Septiembre 2010, 21:31 pm
por Teby45
Ayuda con programa en C (archivo binario)
Programación C/C++
anaceci21 0 1,515 Último mensaje 28 Mayo 2013, 23:08 pm
por anaceci21
Archivo txt codificado !!! por favor ayuda
Seguridad
LUCKYLUCK1 3 5,158 Último mensaje 11 Diciembre 2017, 17:50 pm
por Serapis
Ayuda - Archivo binario
Programación C/C++
Cero++ 8 2,304 Último mensaje 28 Enero 2019, 00:16 am
por Cero++
Ayuda por favor Como editar un archivo con extensión .A2
Hacking
tomgar1965 2 3,523 Último mensaje 15 Enero 2022, 07:25 am
por Kyouma
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines