TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Medusa en 29 de Enero de 2013, 19:53:16
-
Hola, alguien me podria dar alguna sugerencia..
Tengo el siguiente string ascii:
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
-
:shock: Eso no es 4409, es 1139!
Una forma de hacerlo:
(Buffer[0]-0x30)*1000+(Buffer[1]-0x30)*100+....
Saludos!
-
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...
-
Es mas o menos lo mismo:
(Buffer[0]-0x30)*0x1000+(Buffer[1]-0x30)*0x100+....
Saludos!
-
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...
-
hola medusa haz siguiente
valor = Buffer[0];
valor = valor << 4;
valor |= Buffer[1];
valor = valor << 4;
valor |= Buffer[2];
valor = valor << 4;
valor |= Buffer[3];
saludos!!
-
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!!
-
Medusa, dale un vistazo a Librería de Funciones "Útiles" en CCS C (http://www.todopic.com.ar/foros/index.php?topic=22707.0). 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"
-
Hola RedPic, :-/ era exactamenete lo que estaba buscando....GRACIAS!!!!!
-
M'alegro Medusa :mrgreen:
-
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.