Laden...

[gelöst] byte[4] mit FP32-Wert <-> single konvertieren?

Erstellt von CaptainIglo vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.312 Views
C
CaptainIglo Themenstarter:in
366 Beiträge seit 2005
vor 16 Jahren
[gelöst] byte[4] mit FP32-Wert <-> single konvertieren?

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.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo CaptainIglo,

BitConverter-Klasse

herbivore

C
CaptainIglo Themenstarter:in
366 Beiträge seit 2005
vor 16 Jahren

Egal ob ich die obige Zahl als Big oder Little endian eingebe kommt mit BitConverter was falsches raus 😦...

49.485 Beiträge seit 2005
vor 16 Jahren

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

B
1.529 Beiträge seit 2006
vor 16 Jahren

Ein byte[4] ist ja auch kein double, sondern ein single...

C
CaptainIglo Themenstarter:in
366 Beiträge seit 2005
vor 16 Jahren

@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

C
CaptainIglo Themenstarter:in
366 Beiträge seit 2005
vor 16 Jahren

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);