Identificación de compiladores y MSB para tipos de datos

4

Me gustaría saber dos cosas que hacen que mi cabeza sea bastante confusa en estos días.

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

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 cuál es MSB y LSB?

    
pregunta Rookie91

2 respuestas

8

El orden está definido por el compilador. Si observa la Guía del usuario del compilador MPLAB C18 C y busque "endianness" en la página 12 encontrarás:

  

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

En su ejemplo, *xptr hará referencia al LSB y *xptr+1 hará referencia al MSB.

    
respondido por el PeterJ
1

El 'endianness'. En general, no debería importar.

Si desea que los bytes superiores e inferiores de una palabra hagan 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 su código funcione independientemente del compilador / cpu / endian.

    
respondido por el Myforwik

Lea otras preguntas en las etiquetas