Von char Buffer auf ein uint32 ?

Gast #4081103
Lesenswert?

Hallo,

wie bekommt man einen uint32 Wert aus einem Char Buffer wieder in eine 
uint32 Variable?

versuche ergeben immer 0. :-(


char buf[128];
uint32_t uint32val;

uint32val = (uint32_t)(*buf);


*buf steht auf der Adresse wo der uint32 Wert abgelegt wurde.

Danke für jeden Hinweis...
Gast #4081214
Lesenswert?

Hi,

es ist ein Datenpaket welches an der Stelle eine Zahl enthält die 
wiederum in uint32 gespeichert wurde. Wie weiß ich nicht, das kommt so 
aus dem Gerät.

Ein Beispiel habe ich aber.

00 0d 2f 00

entspricht wohl

864000

Ich dachte es würde mit einem Cast gehen die Byte Verschiebung und Oder 
Verknüpfung hatte ich nicht dran gedacht. Ich versuche es mal.

Danke!
#4081260
Lesenswert?

AVRli schrieb:
> uint32val = (uint32_t)(*buf);

Das geht natürlich nicht denn das da:
1
(*buf)

ist gleichbedeutend mit dem da:
1
buf[0]

also du nimmst nur das erste Element des char arrays (was zufällig 0 ist 
in Deinem Beispiel) und castest das dann nach uint32_t und dann ist es 
natürlich immer noch 0.

Versuchs mal so:
1
uint32_t* p = (uint32_t*)buf;
2
uint32val = p[0];

ABER das ist schmutzig und böse und überhaupt nicht portabel, es wird 
nur gehen wenn die Endianness zufällig stimmt, ansonsten würd ich 
einfach die 4 bytes wie von Peter beschrieben explizit in der richtigen 
Reihenfolge zusammensetzen.

Edit: sehe gerade daß es wahrscheinlich nicht mit dem einfachen 
Pointer-Cast gehen wird (d.H. der Cast wird schon gehen, nur das 
Ergebnis wird falsch sein) denn die von Dir gepostete 
Beispiel-Zahlenfolge ist Big-Endian und Dein Prozessor ist 
wahrscheinlich Little-Endian.

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