TODOPIC
Microcontroladores PIC => dsPIC => Mensaje iniciado por: superprp 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??'
-
Prueba esto:
int var;
char coge;
coge=(char)(var & 0xFF);
-
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.
-
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.