Autor Tema: pasar de int a char  (Leído 2840 veces)

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

Desconectado superprp

  • PIC16
  • ***
  • Mensajes: 137
pasar de int a char
« en: 20 de Junio de 2008, 04:57:27 »
Buenas,

Como puedo coger de un registro (de 16bits claro está) sólo la parte alta o la parte baja y meterla en un char sin pérdida de datos??? con los numeros positivos me funciona esto:

int var;
char coge;

coge=(char)var;

pero con números negativos me da error... porque puede ser???? el dato solo está en la parte baja del registro var, no debería suceder no??'

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: pasar de int a char
« Respuesta #1 en: 20 de Junio de 2008, 07:22:03 »
Prueba esto:

int var;
char coge;

coge=(char)(var & 0xFF);

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: pasar de int a char
« Respuesta #2 en: 20 de Junio de 2008, 11:38:18 »
O también prueba esto...

int entero=-212;
int otroentero=53;
int unomas=0x5b87;
unsigned char copia1,copia2,copia3;

//para copiar los 8 bits MAS significativos
copia1=(unsigned int)entero>>8;
copia2=(unsigned int)otroentero>>8;
copia3=(unsigned int)unomas>>8;
//los resultados serían
copia1=0
copia2=0
copia3=0x5b=91


//para copiar los 8 bits MENOS significativos
copia1=(unsigned int)entero;
copia2=(unsigned int)otroentero;
copia3=(unsigned int)unomas;
//los resultados serían
copia1=212
copia2=53
copia3=0x87=135

Pruébalo, porque no recuerdo como se hace el casting de unsigned int con números de signo. Y existe la posibilidad de que el compilador te mande warnings en las operaciones, es normal porque hay que hacer 2 castings, pero por comodidad no puse un casting de unsigned char antes del unsigned int, no hay problema.

« Última modificación: 20 de Junio de 2008, 11:46:00 por migsantiago »

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: pasar de int a char
« Respuesta #3 en: 20 de Junio de 2008, 14:01:03 »
hola, esto me funciona:

int dato=1250;
char *p=(char*)&dato;
char coge;

coge=*p;        // coge parte baja
coge=*(p+1); // coge parte alta

dato puede ser cualquier tipo de dato como entero o flotante, y ubicado en cualquier posición de la RAM.

saludos.
control de movimiento


 

anything