Short aus einem Char array casten ?

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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.