pointer mit typecast

Gast #1956422
Lesenswert?
• ▲
▼
Hallo

habe seit längerem ein komisches Pointerproblem mit dem avr studio

es gibt einen
1
char data[4];
 array in dem sich 4 bytes einer long value befinden

jetzt möchte ich den long wert wieder sauber in eine variable packen und 
bin natürlich zu faul jedes byte einzeln drauf zu shiften wie hier z.b.
1
long wert;
2

3
wert=data[3];
4
wert<<=8;
5
wert|=data[2];
6
wert<<=8;
7
wert|=data[1];
8
wert<<=8;
9
wert|=data[0];

sondern caste einfach den byte array zu einem long wert:
1
long wert;
2
wert=*((long*)data);

was mir allerdings total zufällige ausgaben bringt?
theoretisch müsste das doch so funktionieren?
#1956423
Lesenswert?
• ▲
▼
horst peter schrieb:

> was mir allerdings total zufällige ausgaben bringt?
> theoretisch müsste das doch so funktionieren?

Solange die Bytereihenfolge stimmt, sollte das gehen.
Aber wahrscheinlich wird es an genau dieser Reihenfolge scheitern.

Wo hast du denn die Einzelbytes her?

(Und bitte: nimm für Bytes den Datentyp unsigned char. Alles andere ist: 
Ask for trouble. char nimmst du nur dann, wenn du Textverarbeitung 
machen willst, wo es also egal ist, ob ein char ein Vorzeichen hat oder 
nicht. Für alles andere immer explizit signed char oder unsigned char 
benutzen)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.