Short aus einem Char array casten ?

Gast #181462
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
Gast #181463
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren