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 a los char
s separados en esa variable usando una matriz.
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];
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 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éndola en un puntero uint8_t
y asignando bytePtr
el 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 bytePtr
como una matriz, por lo que obtenemos el séptimo byte a través de la notación entre corchetes.
MikeJ-ES
usuario17592
MikeJ-ES
usuario17592