[ Foro de C ]

consulta,¿por que se me cambia el valor de escritura en archivo?

07-Aug-2020 07:21
Invitado (ian)
1 Respuestas

Hola , tengo una consulta , es relacionado al codigo huffman en c, voy en la parte de comprimir y tengo un error muy puntual y no entiendo el porque , resulta que cuando intento escribir el codigo comprimido , por ej en bites 1100 0001  hago que me muestre en pantalla hasta la ultima linea antes de insertar en el archivo comprimido , y me muestra el caracter que deseo , y en %u me muestra 193 , pero al insertar en archivo , aunque no me tira error me cambia el valor por 183 , o sea me muestra "À" cuando deseo escribir "? ". He declarado todo como unsigned char , y he usado tanto putc como fputc y me sale lo mismo , incluso hice un mini modulo  generando el 1100 0001  e insertandolo , y nada el mismo error.


void main()
{
 unsigned char bit=1;
    bit=1;
    bit=bit<<(7);//1000 0000
	unsigned char bitt=1;
	bitt=bitt<<(6);
	bit=bit|bitt;//1100 0000
	bitt=1;
	bit=bit|bitt;//1100 0001	
	printf("bit : %u",bit); system("pause");

    FILE *archivo;
	archivo=fopen("archivo_binario!.txt","w");
	putc(bit,archivo);
	fclose(archivo);
}


esto es mas o menos el mini experimento hice y me da el mismo error , en pantalla me muestra el signo deseo insertar pero al escribirlo me lo cambia , cabe decir que este error solo me ocurre en algunos casos ,, ¿a que se debe? ,¿cual es el error?.Muchas gracias.



08-Aug-2020 10:08
Nacho Cabanes (+83)

Si es binario, olvídate de caracteres que te muestre. Guarda un byte y luego lee un byte y muestra su valor numérico.

Porque puede que lo que te esté desconcertando sea sólo un programa de codificación, porque son caracteres por encima del 126, que tiene distinta equivalencia en UTF8 y ANSI de Windows, por poner dos ejemplos.

Pero tu programa escribe un fichero binario y no lo lee. Eso, unido a que tu fichero binario tiene un nombre terminado en ".txt" sin ser texto puro, me hace pensar que tu problema puede ser ése.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)