Matriz de caracteres en un int en C18

En Jal, es posible hacer algo como esto:

var word the_var = 0x1234
var byte the_array[2] at the_var;

Ahora puede acceder fácilmente a los bytes de la palabra the_varcon the_array[0]( 0x34) y the_array[1]( 0x12). ¿Se puede hacer algo similar con el compilador C18?

Tengo un unsigned int the_vary quiero acceder a los chars separados en esa variable usando una matriz.

¿ Es una unión C lo que está buscando?
@ MikeJ-UK, ¿sería eso posible también con una matriz de caracteres? Si es así, ¿podría darme un ejemplo de uso básico (en una respuesta)?
¡Creo que PeterJ se me adelantó!
@ MikeJ-UK eso es una lástima, ¡pero gracias de todos modos!

Respuestas (2)

Un equivalente de C es usar una unión anónima, hay algunas formas de usarlos, por lo que vale la pena investigarlos más a fondo, pero un ejemplo es:

static union {
  word the_var;
  byte the_array[2];
};
the_var = 0x1234;
some_value = the_array[0];
some_other_value = the_array[1];

Otra forma de hacerlo es usar un puntero al valor:

word the_var = 0x1234;
byte *the_array = (byte *) &the_var;
some_value = the_array[0];
some_other_value = the_array[1];
Buena respuesta. Solo una nota: la byte *the_array = &thevar;tarea no se compilará en C++.

En C, siempre puede obtener un puntero a la estructura de datos y convertirlo en algún otro tipo (como uint8_t, así:

long myLong = 123456;
uint8_t* bytePtr = (uint8_t*)(&myLong);
uint8_t seventByte = bytePtr[6];

La primera línea son sus datos que no son bytes, de tipo longen este caso. La segunda línea declara un puntero de byte (esencialmente lo mismo que una matriz en C) a los mismos datos tomando la dirección de los datos, convirtiéndola en un puntero uint8_ty asignando bytePtrel puntero a byte(s). La tercera línea explota el hecho de que los punteros y las matrices son casi lo mismo en C y trata nuestro bytePtrcomo una matriz, por lo que obtenemos el séptimo byte a través de la notación entre corchetes.