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
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 | }
|
willibald schrieb: > Etwa so (ohne Test hingekritzelt): > unsigned char * pf = (unsigned char *) &pf; Sorry, vertippt. So:
1 | unsigned char * pf = (unsigned char *) &f; |
1 | union floatmem { |
2 | float f; |
3 | unsigned char pch[sizeof(float)]; |
4 | } foolunion; |
5 | |
6 | ...
|
7 | |
8 | foolunion.f = 3.141; |
9 | |
10 | for (int i=0;i<sizeof(float);i++) |
11 | dosomething(foolunion.pch[i]); |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.