Forum: Compiler & IDEs Short aus einem Char array casten ?


von Stefan Seegel (Gast)


Lesenswert?

Hallo miteinander,

mich beschäftigt gerade folgendes Problem:

Ich habe ein array

unsigned char buf[128];

und ein word:
unsigned short a;

Wie kann ich der Variablen a einen Short mitten aus dem array zuweisen,
also sowas wie

a = (ich will nen short) buf[0x10];

??

Wenn ich in die Cast-Klammer unsigned short schreibe kriege ich
natürlich nur das eine byte raus...

Danke schonmal,

Stefan

von T.Stütz (Gast)


Lesenswert?

Das ist auch richtig so,

Mach zuerst einen Zeiger auf einen unsigned char daraus
und danach Typecast nach unsigned short Zeiger
von dem Datenn der Inhalt genommen wird:

Also:

a = *((unsigned short *) &buf[0x10]);

ein paar Anmerkungen dazu:

- manche Prozessoren mögen es garnicht wenn auf ungeraden Adressen
  zugegriffen wird oder sind dann sehr langsam:

  Bsp: a = *((unsigned short *) &buf[0x11]);

- eventuell musst du noch die Bytes vertauschen
  (Stichwort Big/Little Endian)

- Überleg dir ob die Daten nicht besser als struct/union definiert
  und angelegt sind. Du schreibst leichter:

  a = buf.wDasWort;

- Wenn die Daten als Byte-Array vorliegen du aber trotzdem
  strukturiert darauf zugreifen willst kann mann ja auch einen Zeiger
  darauf setzen und dann über den Zeiger zugreifen:

  struct MeineStruktur *spMeinS = (struct MeineStruktur *) &buf[0];

  a = spMeinS->wDasWort;

Gruss

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.