Autor Tema: alguien sabe como representar el caracter ascii de un entero????  (Leído 2778 veces)

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

Desconectado patoaparato

  • PIC10
  • *
  • Mensajes: 16
alguien sabe como representar el caracter ascii de un entero????
necesito realizar 2 funciones para leer y guardar cadenas de largo variable en una memoria 24lc256
las funciones tienen mas o menos la forma:

void write_str_ext_eeprom(direccion, cadena){...         ----------> para escribir una cadena a partir de la direccion XXXX

char read_str_ext_eeprom(direccion,largo_cadena){...   ---------> para leer una cadena a partir de una direccion XXXXX hasta la direccion XXXXX+largo_cadena

evidentemente los caracteres de la cadena se guardarian en formato ascii en la eeprom, logre hacer la funcion WRITE, pero tengo problemas con la funcion READ ya que no logro representar por ejemplo el byte 65 como "A" y unirla a una cadena

la idea es poder estructurar mejor la informacion almacenada en la eeprom, por ejemplo podria indistintamente guardar cadenas de largo 1000 y largo 5, sin la necesidad de definir bloques de memoria "constantes", y sin perder ningun byte de memoria, a diferencia del compilador que "reserva" espacios constantes de memoria en donde se puede ocupar la totalidad o una parte de este espacio, impidiendo usar el espacio que sobra

por si les interesa la funcion write que hice es:

void write_str_ext_eeprom(int16 address, char *cadena){
int8 i;
for(i = 0; i < strlen(cadena); ++i){
write_ext_eeprom(address + i, *((int8 *)(&*cadena) + i));}




Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: alguien sabe como representar el caracter ascii de un entero????
« Respuesta #1 en: 19 de Julio de 2009, 19:51:26 »
Amigo patoaparato:

Un par de cosas (o tres) ...

primero. tu función podría quedar mucho mas simple de esta forma:
Código: CSS
  1. void write_str_ext_eeprom(int16 address, char *cadena){
  2.    int8 i;
  3.    for(i = 0; i < strlen(cadena); ++i){
  4.       write_ext_eeprom(address + i, cadena[i]);
  5.    }

Sustituyendo directamente *((int8 *)(&*cadena) + i) por cadena hará lo mismo y es mucho mas fácil de leer.

segundo. ¿Por qué no puede leer lo que escribes, sea ASCII o no? Ten en cuenta que el que un byte represente un código ASCII es una convención que tu usas, no una diferencia "real" entre el dato correspondiente, entero o char.

Así si tu asignas un valor entero 65 a una variable char o int8 puedes ver que por ejemplo :
Código: CSS
  1. char c=65;
  2.  
  3.    printf("%d %c",x,x);
  4.  
  5.    65 A
 

genera una salida del tipo "65 A" siendo ambas distintas partiendo del mismo valor original, solo la "interpretación" que hace el printf() es la causa de la diferencia, la primera representa el número como los caracteres ASCII correspondientes al valor entero y la segunda como el carácter ASCII cuyo valor representa el entero.

Pero la variables es una sola, de 8 bits, y al guardarla en la EEPROM se guardará como tal, no como un "6" y un "5", ni como una "A", sino como los 8 bits de ese byte 0b1000001

Por eso no entiendo bien qué quieres decir con lo de guardar o leer como ASCII.

Si quieres puedes explicarnos un poco mas tu idea para ver en qué podemos ayudarte.

Un saludo.

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: alguien sabe como representar el caracter ascii de un entero????
« Respuesta #2 en: 19 de Julio de 2009, 19:53:10 »
Una forma seria la siguiente:

Código: C
  1. char *read(char *s1, int direccion, int largo){
  2.  char ch1;
  3.  int i;
  4.    for(i=direccion;i<largo;i++){
  5.       ch1=read_ext_eeprom(i);
  6.       *s1++=ch1;
  7.    }
  8.    return(s1);
  9. }
  10.  
  11. void main()
  12. {
  13.  
  14.    char buffertext[10];
  15.    
  16.    read(buffertext,0,5);
  17.   .
  18.   .

Saludos
No contesto mensajes privados, las consultas en el foro

Desconectado patoaparato

  • PIC10
  • *
  • Mensajes: 16
Re: alguien sabe como representar el caracter ascii de un entero????
« Respuesta #3 en: 19 de Julio de 2009, 21:02:26 »
gracias por la pronta respuesta :-/

para suky:
intenté con esta rutina, y casi resulta si no fuera por que me muestra más caracteres que los que le especifico

para redpic:
para explicar eso de leer y guardar en ascii, por ejemplo si quisiera guardar en la eeprom la cadena "ABCD" (que proviene de una variable, no de una constante) a partir de la direccion 0, deberia guardar en la eeprom los valores 65 66 67 68 respectivamente (sin usar caracter null), y si quisiera recuperar esta cadena deberia escribir algo asi:

cadena=read_str_ext_eeprom(0,4);

donde cadena tomaria el texto "ABCD". ahora por supuesto, que si por ejemplo le especifico un largo 7 debiera arrojarme los otros 3 caracteres que serian la representacion en ascii de lo que pueda contener la eeprom despues de la cadena 65 66 67 68....

en los ejemplos que encontré aqui no permiten especificar el largo de una cadena a leer, creo que eso lo maneja el compilador internamente  , y es algo que quiero evitar ya que necesito guardar muchas cadenas de distinto largo en la eeprom, sin separaciones "null", y todas guardadas en forma continua (una despues de la otra)

mi idea es hacer una "tabla" al comienzo de la eeprom donde se especifica la direccion y el largo de cada mensaje (estos mensajes provienen principalmente a traves de la USART), de manera que si necesito recuperar alguno de estos mensajes, basta con conocer el indice del mensaje, recurrir a esta "tabla" y apuntar directamente a la direccion que contiene dicho mensaje





Desconectado patoaparato

  • PIC10
  • *
  • Mensajes: 16
Re: alguien sabe como representar el caracter ascii de un entero????
« Respuesta #4 en: 19 de Julio de 2009, 22:54:08 »
olvidé explicar que los numeros 65 66 67 68 corresponden a los 4 bytes en decimal de la cadena "ABCD"

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: alguien sabe como representar el caracter ascii de un entero????
« Respuesta #5 en: 19 de Julio de 2009, 23:05:38 »
Hola.

Pues, la forma mas sencilla es leer hasta que detecte el NULL no? y al guardar, pues guardas toda tu cadena y al final: NULL.

Saludos
El papel lo aguanta todo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: alguien sabe como representar el caracter ascii de un entero????
« Respuesta #6 en: 20 de Julio de 2009, 01:02:32 »
gracias por la pronta respuesta :-/

para suky:
intenté con esta rutina, y casi resulta si no fuera por que me muestra más caracteres que los que le especifico

Cierto, así si solo muestra los pedidos y borra los anteriormente cargados:

Código: C
  1. char *read(char *s1, int direccion, int largo){
  2.  char ch1;
  3.  int i;
  4.    for(i=direccion;i<largo;i++){
  5.       ch1=read_eeprom_extern(i);
  6.       *s1++=ch1;
  7.    }
  8.    while(*s1 != '\0'){
  9.       *s1++ = '\0';
  10.    }
  11.    
  12.    return(s1);
  13. }

Saludos!
No contesto mensajes privados, las consultas en el foro


 

anything