Autor Tema: string ascii a entero  (Leído 1797 veces)

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

Desconectado Medusa

  • PIC18
  • ****
  • Mensajes: 252
string ascii a entero
« en: 29 de Enero de 2013, 19:53:16 »
Hola, alguien me podria dar alguna sugerencia..

Tengo el siguiente string ascii:

Código: [Seleccionar]
Buffer[0] = 0x31;
Buffer[1] = 0x31;
Buffer[2] = 0x33;
Buffer[3] = 0x39;

Necesito comvertir esto a su equivalente decimal: 4409, alguien me podria decir como hacerlo...?

Gracias

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: string ascii a entero
« Respuesta #1 en: 29 de Enero de 2013, 20:25:14 »
 :shock: Eso no es 4409, es 1139!

Una forma de hacerlo:

(Buffer[0]-0x30)*1000+(Buffer[1]-0x30)*100+....



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

Desconectado Medusa

  • PIC18
  • ****
  • Mensajes: 252
Re: string ascii a entero
« Respuesta #2 en: 29 de Enero de 2013, 20:48:46 »
Hola Suky,  :oops:  talvez me exprese mal, estoy recibiendo por el Uart del pic los caracteres ascii 1,1,3 y 9, que representan un numero hexadecimal 0x1139, estos caracteres tienen que ser  equivalentes al valor 4409 en decimal, mi problema es que no tengo la menor idea de como hacer su equivalencia...

« Última modificación: 29 de Enero de 2013, 20:56:37 por Medusa »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: string ascii a entero
« Respuesta #3 en: 29 de Enero de 2013, 20:57:52 »
Es mas o menos lo mismo:

(Buffer[0]-0x30)*0x1000+(Buffer[1]-0x30)*0x100+....


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

Desconectado Medusa

  • PIC18
  • ****
  • Mensajes: 252
Re: string ascii a entero
« Respuesta #4 en: 29 de Enero de 2013, 21:06:26 »
Citar
Es mas o menos lo mismo:

(Buffer[0]-0x30)*0x1000+(Buffer[1]-0x30)*0x100+....



Nop, al hacer lo que tu me recomiendas lo que obtengo es el nro 1139 en decimal, lo que necesito es obtener 4409 en decimal...

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: string ascii a entero
« Respuesta #5 en: 29 de Enero de 2013, 21:15:16 »
hola medusa haz siguiente
Código: C
  1. valor = Buffer[0];
  2.     valor = valor << 4;
  3.     valor |= Buffer[1];
  4.     valor = valor << 4;
  5.     valor |= Buffer[2];
  6.     valor = valor << 4;
  7.     valor |= Buffer[3];



saludos!!
« Última modificación: 29 de Enero de 2013, 21:24:35 por KALLITOS »
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: string ascii a entero
« Respuesta #6 en: 29 de Enero de 2013, 21:51:10 »
Citar
Es mas o menos lo mismo:

(Buffer[0]-0x30)*0x1000+(Buffer[1]-0x30)*0x100+....



Nop, al hacer lo que tu me recomiendas lo que obtengo es el nro 1139 en decimal, lo que necesito es obtener 4409 en decimal...

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

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: string ascii hex a entero
« Respuesta #7 en: 30 de Enero de 2013, 00:38:34 »
Medusa, dale un vistazo a Librería de Funciones "Útiles" en CCS C. Ahí tienes una función que hace lo que quieres:

int32 hex_to_int32(char* pF);

Lo que pasa es que hex_to_int32() usa a su vez dos veces a hex_to_int16(), que también está en esa librería, y que cada una de ellas a su vez tiran otro par de veces hex_to_int8() y ésta por fin usa ascii_to_hex() que ya solo usa las estándar del C.

hex_to_int32() lo que hace es generar un int32 con el contenido en ASCII Hex de un buffer que es lo que creo que estás intentando hacer. Lo hice para enviarle direcciones de memoria de 32 bits en ASCII HEX vía RS232 al PIC para escribir sobre las EEPROM externas y te aseguro que te convierte el 0x1139 en un int32 = 4409

Edit: Cámbiale el titulo al hilo y pon "string ascii hex a entero"
« Última modificación: 30 de Enero de 2013, 00:46:19 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Medusa

  • PIC18
  • ****
  • Mensajes: 252
Re: string ascii a entero
« Respuesta #8 en: 30 de Enero de 2013, 10:11:09 »
Hola RedPic,   :-/ era exactamenete lo que estaba buscando....GRACIAS!!!!!

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: string ascii a entero
« Respuesta #9 en: 30 de Enero de 2013, 15:18:42 »
M'alegro Medusa  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: string ascii a entero
« Respuesta #10 en: 30 de Enero de 2013, 18:02:02 »
Otra forma de hacerlo es unir los nibbles:

Buffer[0] = 0x31;
Buffer[1] = 0x31;
Buffer[2] = 0x33;
Buffer[3] = 0x39;

int num;

num = ((Buffer[0] & 0x0F)<<12) | ((Buffer[1] & 0x0F)<<8 ) | ((Buffer[2] & 0x0F)<<4) | (Buffer[3] & 0x0F);

o bien:

num = ((Buffer[0] & 0x0F)<<4) | (Buffer[1] & 0x0F);
num = num << 8;
num = num | ((Buffer[2] & 0x0F)<<4) | (Buffer[3] & 0x0F);


Saludos.
« Última modificación: 30 de Enero de 2013, 18:04:03 por Picuino »


 

anything