Hi,
ich habe hier ein File in dem in einem 4-byte langem Bereich ein IEEE-codierter Floating Point Wert mit 32bit Genauigkeit steht.
Jetzt sollte ich diesen Wert auslesen und schreiben, doch hab ich keine passende Funktion dafür gefunden.
Wie kann ich das am einfachsten/schnellsten lösen?
mfg
Capt.Iglo
P.S.: Aktuell steht 0x472C4400 im File was 44100 als Zahl ergeben sollte.
Hallo CaptainIglo,
BitConverter-Klasse
herbivore
Egal ob ich die obige Zahl als Big oder Little endian eingebe kommt mit BitConverter was falsches raus 😦...
Hallo CaptainIglo,
ich vermute mal, du hättest gerne, dass wir dir weiterhin helfen. Wie sollen wir das tun, wenn du nicht im Detail beschreibst, was du gemacht hast und wie Ein- und Ausgabedaten aussehen?
herbivore
Ein byte[4] ist ja auch kein double, sondern ein single...
@Borg.
Hab natürlich versucht zu single zu konvertieren...
@herbivore:
Ein- bzw. Ausgabedaten stehen im 1. Post (Aktuell steht 0x472C4400 im File was 44100 als Zahl ergeben sollte) und probiert habe ich es folgendermaßen:
byte[] tmp = BitConverter.GetBytes(44100);
byte[] tmp2 = new byte[] { 0, 68, 44, 71 };
byte[] tmp3 = new byte[] { 71, 44, 68, 0 };
MessageBox.Show("Wert: " + BitConverter.ToSingle(tmp2, 0) +
"\n\rWert: " + BitConverter.ToSingle(tmp3, 0));
Ausgabe:
44100 --> Ich versteh die Welt nicht mehr: vor 1/2h stand da noch was ~4.5M
6.26E-39
44-AC-00-00 --> Stimmt noch immer nicht
Habs herausgefunden:
Man muss den Eingabewert als float casten.
Die korrekte Lösung wäre als wie folgt:
//byte[]->float:
float val1 = BitConverter.ToSingle(bytes, 0);
//float->byte[]:
byte[] val2 = BitConverter.GetBytes((float)floatVal);