• Viernes 29 de Marzo de 2024, 07:00

Autor Tema:  pasar de codigos ascii a sus correspondientes caracteres.  (Leído 9474 veces)

black_flowers

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
pasar de codigos ascii a sus correspondientes caracteres.
« en: Domingo 10 de Abril de 2011, 15:23 »
0
hola, tengo la necesidad de convertir un archivo que contiene caracteres ascii en formato texto (en hexadecimal), a sus correspondientes caracteres ascii. ¿es un lío verdad? en realidad noes complicado de entender pero sí de hacer:
tengo un archivo codigos.txt que contiene esto por ejemplo:
6d 6e 6f
y quiero obtener con c++ sus caracteres para meterlos en otro fichero es decir, que el otro fichero (letras.txt)quedaría:
m n o
Y esto que pensé que iba a ser coser y cantar me encuentro que soy incapaz de hacerlo.
¿alguna idea?

Thanatos-chan

  • Miembro MUY activo
  • ***
  • Mensajes: 136
  • Nacionalidad: do
    • Ver Perfil
Re: pasar de codigos ascii a sus correspondientes caracteres.
« Respuesta #1 en: Domingo 10 de Abril de 2011, 16:47 »
0
lo de pasar de hex a ascii, se puede, mas lo que se tiene que ver es como identificar, los strings en hexadecimal.

a ver publica un archivo "codigos.txt"
Que es un genio???? yo superare a un genio con trabajo duro, y eso es todo.

black_flowers

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: pasar de codigos ascii a sus correspondientes caracteres.
« Respuesta #2 en: Lunes 11 de Abril de 2011, 01:21 »
0
Cita de: "Thanatos-chan"
lo de pasar de hex a ascii, se puede, mas lo que se tiene que ver es como identificar, los strings en hexadecimal.

a ver publica un archivo "codigos.txt"
no se si te entendí bien, me pides que adjunte el fichero codigos.txt?, vale, va adjunto.
contiene caracteres e hexadecimal a mogollón. Lo que necesito es cogerlos de dos en dos y (tratandolos como si fuesen caracteres ascii, que por cierto saldrán unos caracteres rarísimos) obtener su caracter ascii equivalente. Todo esto es algo ambiguo por lo siguiente:
Un caracter cualquiera, la 'a' por ejemplo no es más que el codigo ascii 61 (creo recordar). Luego son la misma cosa, es decir que para tener un char que contenga la letra 'a' lo que va a contener ese char en realidad es el número 61, que es su codigo ascii. ¿cual es el problema entonces? que yo necesito obtener del fichero de texto, los numeros como tal, es cedir 33,8f,4d, etc, pero en lugar de eso lo único que he conseguido leer son los caracteres ascii de esos numeros ¿me explico?ose que si yo leo de ese fichero con fscanf en lugar de un 33, obtengo los caracteres ascii del '3' y del '3' lo cual no me vale, porque yo necesito obtener un entero en hexadecimal que es el 33. Ya verás que la cosa es más complicada de lo que parece.

si yo tengo por ejemplo un fichero codigos.txt con esto:
33  33

lo que tengo es que obtener un fichero caracteres.txt con esto:
! ! (pongo sólo el 33 porque es el único codigo que me sé que es el de la '!')

un saludo,espero no haberlo liado aun más.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Thanatos-chan

  • Miembro MUY activo
  • ***
  • Mensajes: 136
  • Nacionalidad: do
    • Ver Perfil
Re: pasar de codigos ascii a sus correspondientes caracteres.
« Respuesta #3 en: Lunes 11 de Abril de 2011, 17:31 »
0
a ver, como dice el dicho, comienza por el principio...

Cita de: "black_flowers"
Lo que necesito es cogerlos de dos en dos y (tratandolos como si fuesen caracteres ascii, que por cierto saldrán unos caracteres rarísimos)

si yo tengo por ejemplo un fichero codigos.txt con esto:
33  33
lo que tengo es que obtener un fichero caracteres.txt con esto:
! ! (pongo sólo el 33 porque es el único codigo que me sé que es el de la '!')

si buscas la tabla de conversion Ascii a hexadecimal. el numero 33 es igual a 3 mientras que el 21 es igual a !

chequea esta pagina http://www.table-ascii.com/ aca tienen una buena tabla de conversión, para que te hagas la idea de que se supone debe ser tu output.

segun veo el 33 es igual a !, pero en base decimal. asi que valida el input de el archivo "codigos.txt" a ver si realmente esta en hex.

como indicas debes leer el string de 2 en 2, y convertir el valor de hex a ascii

utiliza la tabla como referencia para que valides que los valores que obtienes son correctos.

aca un ejemplo que aparece en internet. que te pudiera servir.

Código: C++
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. /*
  6. *   To convert 53 to the character 'S':
  7. *   char returnVal = hexToString('5', '3');
  8. */
  9. char hexToAscii(char first, char second)
  10. {
  11.     char hex[5], *stop;
  12.     hex[0] = '0';
  13.     hex[1] = 'x';
  14.     hex[2] = first;
  15.     hex[3] = second;
  16.     hex[4] = 0;
  17.     return strtol(hex, &stop, 16);
  18. }
  19. int main(int argc, char* argv[])
  20. {
  21.     printf("%cn", hexToAscii('5', '3'));
  22. }
  23.  
  24.  

suerte!
Que es un genio???? yo superare a un genio con trabajo duro, y eso es todo.

black_flowers

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: pasar de codigos ascii a sus correspondientes caracteres.
« Respuesta #4 en: Lunes 11 de Abril de 2011, 22:12 »
0
el ejemplo es bueno, lo que pasa es que estoy viendo que mi verdadero problema está en la forma de sacar los caracteres del fichero de texto. Es decir que si en el fichero de texto tengo escrito 33 y lo saco tanto con fgets o fscanf lo que saco es el codigo ascii del 33. Y ese es el problema de que no pueda transformarlo en sus codigos ascii, ya que si yo pudiese sacar el numero 33 como entero hexadecimal podría convertirlo en su caracter ascii solo con asignarlo directamente a una cadena, o a un char, de esta forma:
int numero = 33;
char caracter = numero;
(no lo he probado pero creo que es así,) en resumen que mi problema parece ser otro distinto al del título, ya que lo que necesito es extraer el número que está escrito como texto en un fichero de texto y convertirlo a entero.
uf ya se lía.

black_flowers

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: pasar de codigos ascii a sus correspondientes caracteres.
« Respuesta #5 en: Lunes 11 de Abril de 2011, 22:32 »
0
bueno a lo de antes qusiera añadir que sí que puedo sacar los numeros como enteros decimales así:
fscanf (pFileShell, "%d", &iOpCode);
pero en hexadecimal de esta manera:fscanf (pFileShell, "%x", &iOpCode);
tras ejecutarla iOpCode contiene -1957267453

black_flowers

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: pasar de codigos ascii a sus correspondientes caracteres.
« Respuesta #6 en: Martes 12 de Abril de 2011, 23:22 »
0
bueno parece que con esto funciona, con este codigo leo un fichero que contiene codigos ascii en hexadecimal y creo un archivo nuevo con los caracteres alfanumericos correspondientes. Gracias tanatos por tu ayuda  ;)

Código: C++
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. int main(int argc, char **argv)
  7. {
  8.    FILE * pFileShell;
  9.    FILE * pFileAsci;
  10.  
  11.    int iOpCode;
  12.  
  13.     pFileShell = fopen (argv[1] , "r");
  14.     pFileAsci = fopen (argv[2] , "w+");
  15.    if (pFileShell == NULL) perror ("Error opening file");
  16.    else
  17.    {
  18.        if(pFileAsci == NULL)    perror ("Error creating file");
  19.        else
  20.        {rewind (pFileShell);
  21.            while ( ! feof (pFileShell) )
  22.              {
  23.                 fscanf (pFileShell, "%x", &iOpCode);
  24.                 fprintf (pFileAsci,"%c",iOpCode);
  25.             }
  26.          fclose (pFileAsci);
  27.          fclose (pFileShell);
  28.        }
  29.    }
  30.    return 0;
  31. }
  32.  
  33.