PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : gcc-double nach C#-double konvertieren?



Jaecko
12.06.2010, 14:02
Moin.

Ein AVR schreibt mir auf eine SD-Karte einige Log-Daten; ich klatsch also einfach die
Struct mit den jeweiligen Werten Byteweise auf die Karte.
Darunter sind auch double-Werte, die ja beim AVR 4 Byte gross sind.
C# verwendet aber 8 Byte für eine double-Variable.

Aus dem von der SD-Karte gelesenen Byte-Array les ich z.B. einen Uint32 so:


byte[] dArray = new byte[4];
Array.Copy(readBytes, 22, dArray, 0, 4); // 22: Startposition, 0: Zielposition, 4: Länge
UInt32 dData = BitConverter.ToUInt32(dArray,0);


Ein 8-Bit-Double entsprechend so:


byte[] edArray = new byte[8];
Array.Copy(readBytes, 26, eArray, 0, 8); // 26: Startposition, 0: Zielposition, 8: Länge
double eData = BitConverter.ToDouble(eArray,0);


Wie kann ich nun die 4-Byte-double vom AVR in ein 8-Byte-double für C# konvertieren?

mfG

shedepe
12.06.2010, 15:48
Spricht was dagegen das ganze als float einzulesen ? Float is doch bereits 4 Byte breit

markusj
12.06.2010, 20:50
Jaecko: AVRs kennen keinen Double, dort gilt: Double = Float (daher die 4 Bytes)

AVR-GCC dürfte wie die meisten Compiler nach IEEE754 rechnen, du müsstest daher nur eine Möglichkeit finden, den Typ des gelesenen Wertes umzudefinieren ohne dabei eine Typumwandlung durchzuführen.

mfG
Markus

Jaecko
12.06.2010, 21:22
Den Wert einfach als float einzulesen hat perfekt geklappt, Thx.
War fast wieder zu einfach *g*.