Double in Byte Array und zurück

OP #2266241
Lesenswert?

Hi,

ich versuche gerade ein double oder float (sind soweit ich weiß in 
avr-gcc beides 4 Byte lang) in seine Bestandteile bzw. einzelne bytes zu 
zerlegen.
Die sollen dann in unsogned chars gespeichert werden.

Ich habe schon versucht mit einem (unsigned char) vor der zahl das erste 
Byte in einer Varibale zu speichern, und dann mit ([zahl]>>8) die 
nächsten Bytes an den Anfang zu schieben und dann wieder zu speichern. 
Das klappt aber leider nicht so ganz.

Habt ihr ne Idee wie das gehen könnte?

MfG
Philipp
Gast #2266248
Lesenswert?

Philipp Maricek schrieb:
> Ich habe schon versucht mit einem (unsigned char) vor der zahl das erste
> Byte in einer Varibale zu speichern, und dann mit ([zahl]>>8) die
> nächsten Bytes an den Anfang zu schieben und dann wieder zu speichern.
> Das klappt aber leider nicht so ganz.

nein, denn der Typecast wandelt den float-Zahlenwert in einen 
unsigned-Zahlenwert um (unter Verlust der Nachkommastellen und der 
höheren Bytes).

> Habt ihr ne Idee wie das gehen könnte?

Etwa so (ohne Test hingekritzelt):
1
float f = 3.14;
2
unsigned char bytes[sizeof (f)];
3
unsigned char * pf = (unsigned char *) &pf;
4
for (int i = 0; i < sizeof(f); i++)
5
{
6
    bytes[i] = pf[i];
7
}

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