In Jal ist es möglich, so etwas zu tun:
var word the_var = 0x1234
var byte the_array[2] at the_var;
the_var
Jetzt können Sie mit the_array[0]
( 0x34
) und the_array[1]
( ) bequem auf die Bytes des Wortes zugreifen 0x12
. Kann etwas Ähnliches mit dem C18-Compiler gemacht werden?
Ich habe eine und möchte mit einem Array unsigned int the_var
auf die separaten s in dieser Variablen zugreifen .char
Ein C-Äquivalent ist die Verwendung einer anonymen Union. Es gibt einige Möglichkeiten, sie zu verwenden, sodass es sich lohnt, sie weiter zu untersuchen, aber ein Beispiel ist:
static union {
word the_var;
byte the_array[2];
};
the_var = 0x1234;
some_value = the_array[0];
some_other_value = the_array[1];
Eine andere Möglichkeit besteht darin, einen Zeiger auf den Wert zu verwenden:
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;
Zuweisung wird nicht in C++ kompiliert.In C können Sie immer einen Zeiger auf die Datenstruktur erhalten und ihn in einen anderen Typ umwandeln (z. B. uint8_t
, so:
long myLong = 123456;
uint8_t* bytePtr = (uint8_t*)(&myLong);
uint8_t seventByte = bytePtr[6];
Die erste Zeile sind Ihre Nicht-Byte-Daten, long
in diesem Fall vom Typ. Die zweite Zeile deklariert einen Byte-Zeiger (im Wesentlichen derselbe wie ein Array in C) auf dieselben Daten, indem sie die Adresse der Daten nimmt, sie in einen uint8_t
Zeiger umwandelt und dem bytePtr
einen Zeiger auf Byte(s) zuweist. Die dritte Zeile nutzt die Tatsache aus, dass Zeiger und Arrays in C fast dasselbe sind, und behandelt unser bytePtr
als ein Array, sodass wir das siebte Byte über die Klammernotation erhalten.
MikeJ-UK
Benutzer17592
MikeJ-UK
Benutzer17592