4 votos

Compiladores e identificación MSB para tipos de datos

Me gustaría saber dos cosas que me están confundiendo bastante la cabeza estos días.

Si asigno un int en C18 compiler Sé que tomará dos bytes y, si inicializo un puntero a la variable, digamos:

int x,*xptr;
xptr = &x;

entonces tengo que acceder a *xptr para el primer byte y *xptr+1 para el segundo byte?

Bueno, ¿qué factor determina que uno es MSB y LSB?

1voto

La "endianidad". En general, no debería importar.

Si quieres los bytes superior e inferior de una palabra haz algo como:

unsigned int a = 1234;
unsigned char upper;
unsigned char lower;

upper = (a>>8)&0xFF;
lower = a & 0xFF;

y al revés:

unsigned char upper = 12;
unsigned char lower = 34;
unsigned int a = 0;
a |= upper;
a <<= 8;
a |= lower;

Esto asegurará que tu código funcione independientemente del compilador/cpu/endian.

0voto

xilun Puntos 261

El orden lo define el compilador. Si se observa el Guía del usuario del compilador MPLAB C18 C y busque "endianness" en la página 12 encontrará:

La endogeneidad se refiere al orden de los bytes en un valor multibyte. MPLAB C18 almacena los datos en formato little-endian. Los bytes en direcciones más bajas tienen menor significado (el valor se almacena "little-end-first").

Así que en su ejemplo *xptr hará referencia al LSB y *xptr+1 hará referencia al MSB.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X