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]);
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) ?
> 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?
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.
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
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?
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.
>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!
> 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; |
>>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#...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.