DOUBLE via SPI senden bzw in BYTEs zerlegen

Hallo erst mal,
ich benötige kurze Hilfe

Laut Definition kann man an SPI nur BYTEs senden.

Nun habe ich einen DOUBLE Wert.

Wie kann ich dieses DOUBLE in vier einzelne BYTES zerlegen?

Das zusammenführen müsste einfacher gehen
mittels Shift und OR
( DOUBLE << 8 ) || BYTE
Das ganze noch zweimal wiederholen

Oder liege ich da total falsch?

Danke schon mal im Voraus
Udo

Einfach einen Pointer auf double (was übrigens das gleiche wie float ist) auf einen Pointer auf byte casten:

byte* asBytes = (byte*)&value;

Dann kannst du asBytes als Byte Array betrachten und mit einer for-Schleife darüber iterieren

Rückwärts geht es so:

double value = *(double*)asBytes;

Deine Version geht so ähnlich auch, ist aber komplizierter. Eine dritte Option ist eine union aus double und einem Byte Array.

Das zusammenführen müsste einfacher gehen
mittels Shift und OR
( DOUBLE << 8 ) || BYTE
Das ganze noch zweimal wiederholen
Oder liege ich da total falsch?

“total” nicht, aber schon ziemlich daneben :wink:

Das einfachste, Speicherzellen falschen Typs zu missbrauchen ist, die Adresse als pointer auf den gewünschten Datentyp zu casten. ( Wie serenifly richtig beschrieben hat )

Alternativ gibt es [b]union[/b]
union { float x; byte b[4]; } doubledata;
doubledata.x = 123.456;
doubledata.b; // der gleiche Speicher, als byte Array