Forum: PC-Programmierung C# (2005) : 4Bytes in Float umwandlen


von Patrick (Gast)


Lesenswert?

Hallo, ich habe Probleme mit der Umwandlung von 4 Byte in eine Kommazahl 
(float). Wie kann man dies in C# (2005) realisieren?

Hiermit kann ich schon mal ein Byte in eine Textbox ausgeben:
txtADC.Text = string.Format("{0:X2} ", NewMsg.Data[7]);

von Patrick (Gast)


Lesenswert?

Für jeden Vorschlag bin ich sehr sehr dankbar!

von Patrick (Gast)


Lesenswert?

Byte 1 = 56;
Byte 2 = 34;
Byte 3 = 23;
Byte 4 = 22;

----> diese 4 bytes sollen nun in einen float oder auch double 
umgewandelt
      werden.

Wie macht man dies mit C#(2005) ?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Byte 1 = 56;
> Byte 2 = 34;
> Byte 3 = 23;
> Byte 4 = 22;
>
> ----> diese 4 bytes sollen nun in einen float oder auch double
> umgewandelt werden.

Und, welches Ergebnis erwartest Du?

von Jorge (Gast)


Lesenswert?

Warum C#? Folter?

Cis ist eine Krüppelsprache a la Visual Basic deshalb Zeitverschwendung 
drum nimm C++. Übermorgen in 15 Jahren gibts das Zeuch eh nicht mehr.

>
Für dein Problem empfehle ich eine kurze Lib als COM-Object in C. Das 
geht mit dem Assistenten in vc6 und .net ganz leicht. COM ObjeKte kann 
man einfach einbinden.

von Florian (Gast)


Lesenswert?

Hallo Patrick,

ich denke Du musst Dein Problem präziser Formulieren. Auf Deine Frage 
kann ich (und ich denke auch andere) so keine sinnvolle Antwort geben.
Was willst Du machen? Willst Du die 4 Byte in EIN float zusammenfassen? 
Was steht dann vor und was nach dem Komma? Willst Du die 4 Byte einzeln 
jeweils in ein float umwandeln??? Was für eine Ergebnis willst Du haben?

Gruß
Florian

von Patrick (Gast)


Lesenswert?

Ok das hab ich vergessen zu sagen. Ich verwende auf einem 
Mikrocontroller einen AD-Wandler dieser liefert mir zuerst einen float 
Wert. Anschließend wandle ich diesen float Wert in 4 Bytes und sende 
dann diese 4 Bytes über den CAN-Bus. Jetzt möchte ich natürlich diese 4 
Bytes wieder in einen float Wert umwandeln (z.B. 1.3453). Wie kann ich 
dies in C# (2005 oder auch in C++ (MFC) realiseren?

von Simon K. (simon) Benutzerseite


Lesenswert?

Patrick wrote:
> Ok das hab ich vergessen zu sagen. Ich verwende auf einem
> Mikrocontroller einen AD-Wandler dieser liefert mir zuerst einen float
> Wert.
Sowas hab' ich ja noch nie gehört!

> Anschließend wandle ich diesen float Wert in 4 Bytes und sende
> dann diese 4 Bytes über den CAN-Bus. Jetzt möchte ich natürlich diese 4
> Bytes wieder in einen float Wert umwandeln (z.B. 1.3453). Wie kann ich
> dies in C# (2005 oder auch in C++ (MFC) realiseren?
Nunja, float ist nicht gleich float. Du müsstest herausfinden a) welches 
Float Format von deinem AD-Wandler kommt (?) und b) in welcher 
Reihenfolge du die Bytes sendest.

von ARM-Fan (Gast)


Lesenswert?

>Cis ist eine Krüppelsprache a la Visual Basic deshalb Zeitverschwendung
>drum nimm C++. Übermorgen in 15 Jahren gibts das Zeuch eh nicht mehr.

Oh mann, wenn ich so ein unqualifiziertes Geblubber schon wieder
lesen muß...

Die Lösung deines Problems ist ganz einfach. Die Bitconverterklasse
ist dein Freund. Die Byteorder hängt natürlich von deinem µC ab.
1
byte[] b = new byte[4] { 56, 34, 23, 22 };
2
float f = BitConverter.ToSingle(b,0);
=> 1.220848E-25
1
byte[] b = new byte[4] { 22, 23, 34, 56 };
2
float f = BitConverter.ToSingle(b,0);
=> 0.00003864531

Ich will mal die Programmiersprache sehen, in der das mit Bordmitteln
einfacher zu lösen geht!

von der mechatroniker (Gast)


Lesenswert?

> Ich will mal die Programmiersprache sehen, in der das mit Bordmitteln
> einfacher zu lösen geht!
1
char c[] = { 22, 23, 34, 56 };
2
float f = *(float *) c;

von Jorge (Gast)


Lesenswert?

>>Cis ist eine Krüppelsprache a la Visual Basic deshalb Zeitverschwendung
>>drum nimm C++. Übermorgen in 15 Jahren gibts das Zeuch eh nicht mehr.

>Oh mann, wenn ich so ein unqualifiziertes Geblubber "schon wieder"
>lesen muß...

Memoryeffekt scheint da.

Wie qualifiziert muss man für die Microsoftstrategie sein.
Java: Einfach den Mainframe mit dem PC vernetzen da nimmt man schon mal 
Einbußen hin, durch die einfache Skalierbarkeit hat man sogar Vorteile.

Jetzt noch so ein plattformabhängiger Dialekt. Kannst ja in Dein Windows 
Forms Programm nach jedem Statement ein {for (int i=0;i<1000;i++);} 
einflicken.

Dein freier Wille: Where do You want to go today? Learn about C#...

von Bernd H. (geeky)


Lesenswert?

Ich finde es gibt für Windows-Anwendungen nichts besseres als C#.

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
Noch kein Account? Hier anmelden.