Hola y gracias por responder.
Comprendo lo que dices sobre los N bytes. Pero entonces yo tengo la duda de:
¿debo restarle -1 a size que es la variable que almacenaba el tamaño total del archivo?.
Utilizo Dev c++ y no se como poner la etiquetas que mencionas, ¿puedes explicarme como hacerlo?
Este es el nuevo codigo:
#include <stdio.h>
#include <iostream>
#define MAXLINE 256
int main()
{
int size, i;
char val[MAXLINE];
FILE* f = fopen("./text", "r");
fseek(f, 0x0, SEEK_END);
size = ftell(f);
size -= 1;
printf("size: %d", size);
fseek(f, 0x0, SEEK_SET);
for(i = 0; i < size; ++i){
fread(&val, 1, sizeof (char), f);
printf("\nval: %x\n", val);
}
fclose (f);
for(i = 0; i <= size; ++i){
switch(val){
case 0x32:
val = 'a';
break;
case 0x11:
val = 'b';
break;
case 0x36:
val = 'c';
break;
case 0x12:
val = 'd';
break;
case 0x19:
val = 'e';
break;
case 0x0d:
val = 'f';
break;
case 0x02:
val = 'g';
break;
case 0x07:
val = 'h';
break;
case 0x08:
val = 'i';
break;
case 0x37:
val = 'j';
break;
case 0x14:
val = 'k';
break;
case 0x04:
val = 'l';
break;
case 0x06:
val = 'm';
break;
case 0x0e:
val = 'n';
break;
case 0x0a:
val = 'o';
break;
case 0x16:
val = 'p';
break;
case 0x34:
val = 'q';
break;
case 0x05:
val = 'r';
break;
case 0x09:
val = 's';
break;
case 0x10:
val = 't';
break;
case 0x13:
val = 'u';
break;
case 0x01:
val = 'x';
break;
case 0x0c:
val = 'y';
break;
case 0x0f:
val = 'z';
break;
default:
val = '*';
break;
}
}
FILE* h = fopen("./text.txt", "w");
fseek(h, 0x0, SEEK_SET);
for(i = 0; i <= size; ++i)
fwrite(&val, sizeof(char), 1, h);
fclose (h);
}
Y esto es lo que entrega el archivo de texto:
d*rxx*srh*rh*rg*************i********x**********************g**********x****t*****xx*****************************q**************************i********************u**********************************g*******************************i***************************
----------------
Aun sigue siendo incorrecto, ¿Cual es mi error?.
Edit: me di cuenta tambien que el tamaño del arreglo tiene que ver, en la primera version habia colocado 300 cuando teoricamente solo necesito 256. Con 256 obtuve el resultado que puse arriba y con 300 obtuve esto:
d*rxx*srh*rh*rg*********************g*******i****x**g***********i***********i********x**********************g**********x****t*****xx*****************************q**************************i**********************s************q*******************g***********
¿Existe algun problema en ello? ¿Si de todas formas debería leer 256 bytes y no 300?.
Comprendo lo que dices sobre los N bytes. Pero entonces yo tengo la duda de:
¿debo restarle -1 a size que es la variable que almacenaba el tamaño total del archivo?.
Utilizo Dev c++ y no se como poner la etiquetas que mencionas, ¿puedes explicarme como hacerlo?
Este es el nuevo codigo:
#include <stdio.h>
#include <iostream>
#define MAXLINE 256
int main()
{
int size, i;
char val[MAXLINE];
FILE* f = fopen("./text", "r");
fseek(f, 0x0, SEEK_END);
size = ftell(f);
size -= 1;
printf("size: %d", size);
fseek(f, 0x0, SEEK_SET);
for(i = 0; i < size; ++i){
fread(&val, 1, sizeof (char), f);
printf("\nval: %x\n", val);
}
fclose (f);
for(i = 0; i <= size; ++i){
switch(val){
case 0x32:
val = 'a';
break;
case 0x11:
val = 'b';
break;
case 0x36:
val = 'c';
break;
case 0x12:
val = 'd';
break;
case 0x19:
val = 'e';
break;
case 0x0d:
val = 'f';
break;
case 0x02:
val = 'g';
break;
case 0x07:
val = 'h';
break;
case 0x08:
val = 'i';
break;
case 0x37:
val = 'j';
break;
case 0x14:
val = 'k';
break;
case 0x04:
val = 'l';
break;
case 0x06:
val = 'm';
break;
case 0x0e:
val = 'n';
break;
case 0x0a:
val = 'o';
break;
case 0x16:
val = 'p';
break;
case 0x34:
val = 'q';
break;
case 0x05:
val = 'r';
break;
case 0x09:
val = 's';
break;
case 0x10:
val = 't';
break;
case 0x13:
val = 'u';
break;
case 0x01:
val = 'x';
break;
case 0x0c:
val = 'y';
break;
case 0x0f:
val = 'z';
break;
default:
val = '*';
break;
}
}
FILE* h = fopen("./text.txt", "w");
fseek(h, 0x0, SEEK_SET);
for(i = 0; i <= size; ++i)
fwrite(&val, sizeof(char), 1, h);
fclose (h);
}
Y esto es lo que entrega el archivo de texto:
d*rxx*srh*rh*rg*************i********x**********************g**********x****t*****xx*****************************q**************************i********************u**********************************g*******************************i***************************
----------------
Aun sigue siendo incorrecto, ¿Cual es mi error?.
Edit: me di cuenta tambien que el tamaño del arreglo tiene que ver, en la primera version habia colocado 300 cuando teoricamente solo necesito 256. Con 256 obtuve el resultado que puse arriba y con 300 obtuve esto:
d*rxx*srh*rh*rg*********************g*******i****x**g***********i***********i********x**********************g**********x****t*****xx*****************************q**************************i**********************s************q*******************g***********
¿Existe algun problema en ello? ¿Si de todas formas debería leer 256 bytes y no 300?.