Ayuda con archivo binario, por favor.

Iniciado por carlosguay, 20 Abril 2011, 18:41 PM

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

Arkangel_0x7C5

Lo que te pase no debería de comerse ningún numero, si lo dices por la salida por pantalla, es el printf el que no los muestra
Código (cpp) [Seleccionar]

printf("Numero %08X Invertido %08X\n",Numero,Invertido);

Con esta modificacion muestra tambien los 0 de arriba, pero que no los mostrara no significa que no los invierta. Ese trozo lo puse para que vieras el resultado

Este code esta filtrando en grupos de 2bytes (16bits)
Código (cpp) [Seleccionar]

if ( addr & 0x2 )  data = (data>>16)&0xffff ;
  else               data = (data&0x0000ffff) ;

carlosguay

Pues tengo novedades.

Desde que me dijiste lo de litte-endian, le e estado dando vueltas, ya que yo quiero usar el programa en cualquier pc, la idea de invertir los bytes, creo que no era buena, ya que en un pc big-endian, tambien invertiria los bytes y entonces seguiria estando mal.
He buscado la forma de invertir los datos recogidos, pero solo si el pc, es little, y creo que con esto lo e conseguido.

data = ((i&0xff)<<24)+((i&0xff00)<<8)+((i&0xff0000)>>8)+((i>>24)&0xff);
fwrite( (unsigned char*) &data, 1, sizeof(data), fd);





Solo me faltaria confirmar, que en un pc big-endian, funcionaria bien.

Pero como los problemas nunca vienen solos, pues lo que te comente del codigo para invertir los bytes, osea que se comia bytes, me referia al archivo y no a la salida de consola, el resultado que con este proceso, tambien me cambia algunos bytes.




Como ves, el archivo sacado com el programa que te comente y el sacado com mi programa, esto creo que va a ser mas dificil de solucionar, xd.

Perdonar por tantas imagenes, pero siempre e creido, que mas vale una imagen que mil palabras.

Arkangel_0x7C5

ese code que pones yo no lo veo dar problemas, lo que dudo es que no los invierta si es Big-endian. Para invertirlos segun sea Big-endian o no yo averiguaría si estas en un PC big-endian o litte-endian
Pon el code completo porque sino me parece que no vamos a encontrar nada

Lo que me muestras, tienen en común el bit de signo, el numero 8 si manejas bytes o el 31 en caso de grupos de 4 bytes, pero como lo inviertes se queda en el numero 8.