Char-Array bei einem int in C18

In Jal ist es möglich, so etwas zu tun:

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

the_varJetzt 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_varauf die separaten s in dieser Variablen zugreifen .char

Ist eine C-Union das, wonach Sie suchen?
@ MikeJ-UK wäre das auch mit einem char- Array möglich? Wenn ja, könnten Sie mir ein grundlegendes Verwendungsbeispiel geben (in einer Antwort)?
Ich glaube, PeterJ ist mir zuvorgekommen!
@MikeJ-UK das ist schade, aber trotzdem danke!

Antworten (2)

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];
Gute Antwort. Nur eine Anmerkung: Die 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, longin 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_tZeiger umwandelt und dem bytePtreinen Zeiger auf Byte(s) zuweist. Die dritte Zeile nutzt die Tatsache aus, dass Zeiger und Arrays in C fast dasselbe sind, und behandelt unser bytePtrals ein Array, sodass wir das siebte Byte über die Klammernotation erhalten.