Autor
|
Tema: Ayuda con archivo binario, por favor. (Leído 7,852 veces)
|
carlosguay
Desconectado
Mensajes: 42
|
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. 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
Mensajes: 361
|
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
Mensajes: 42
|
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
Mensajes: 361
|
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
Mensajes: 42
|
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. Dim a As String Dim b As String Dim c As String Dim d As String Dim data As String a = Text1 b = Text2 c = Text3 d = Text4 data = a & b & c & d If data <> "" = False Then End Else data = d & c & b & a Text5 = data 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
|
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
Mensajes: 42
|
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
Mensajes: 361
|
si quieres invertirlos haz algo así: long Numero = 0x01020304;//Este es el numero que vamos a invertir long Invertido = 0;//Lo guardaremos aqui //Cojo la direccion de la variable con & y ago un cast de tipos con (char*) //para que lo interprete como un array de bytes; //[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 ((char*)&Invertido)[0] = ((char*)&Numero)[3]; ((char*)&Invertido)[1] = ((char*)&Numero)[2]; ((char*)&Invertido)[2] = ((char*)&Numero)[1]; ((char*)&Invertido)[3] = ((char*)&Numero)[0]; printf("Numero %X Invertido %X\n",Numero,Invertido);
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
Mensajes: 42
|
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
Mensajes: 42
|
Pues no soy capaz de conseguirlo, esto me esta volviendo loco, , si cambio la opcion de leer en vez de 4 a 1, que por cierto creo que sera esto. if ( addr & 0x2 ) data = (data>>16)&0xffff ; 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. 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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Listar archivo binario
Programación C/C++
|
Teby45
|
0
|
2,203
|
17 Septiembre 2010, 21:31 pm
por Teby45
|
|
|
Ayuda con programa en C (archivo binario)
Programación C/C++
|
anaceci21
|
0
|
1,720
|
28 Mayo 2013, 23:08 pm
por anaceci21
|
|
|
Archivo txt codificado !!! por favor ayuda
Seguridad
|
LUCKYLUCK1
|
3
|
5,621
|
11 Diciembre 2017, 17:50 pm
por Serapis
|
|
|
Ayuda - Archivo binario
Programación C/C++
|
Cero++
|
8
|
2,630
|
28 Enero 2019, 00:16 am
por Cero++
|
|
|
Ayuda por favor Como editar un archivo con extensión .A2
Hacking
|
tomgar1965
|
2
|
4,026
|
15 Enero 2022, 07:25 am
por Kyouma
|
|