Matriz de caracteres en un int en C18

2

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_var con the_array[0] ( 0x34 ) y the_array[1] ( 0x12 ). ¿Se puede hacer algo similar con el compilador C18?

Tengo un unsigned int the_var y quiero acceder al char s separado en esa variable usando una matriz.

    
pregunta Keelan

2 respuestas

4

Un equivalente en C es usar una unión anónima, hay algunas formas de usarlas, por lo que vale la pena investigarlas 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];
    
respondido por el PeterJ
3

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

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

La primera línea son los datos que no son de bytes, de tipo long en 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éndolos en un puntero uint8_t , y asignándolos a bytePtr , que es un 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 a nuestro bytePtr como una matriz, por lo que obtenemos el séptimo byte a través de la notación con corchetes.

    
respondido por el angelatlarge

Lea otras preguntas en las etiquetas