Hallo, ich brauche das 32bit WORD einer Fließkommazahl vom Typ float (single precision) z.B. -1,4568 WORD: 101011010001111000001100000000 (nur als Beispiel, das sind jetzt zufällige Bits) Ich habe bereits einen Code (in C) geschrieben, der das schafft, doch der ist ziemlich lang, da er zuerst mal Exponent und Mantisse berechnet und dann erst umrechnen kann. Gibt es eine einfachere (und schnellere) Lösung? (Compiler: AVR-GCC, uC: Atmega2560) Danke im voraus Fabian
Gast
#2912917
Gast
#2912930
Bin mir nicht sicher, ob ich das Problem richtig verstanden habe. Aber vielleicht möchstest Du einfach nur das hier:
1 | |
2 | |
Das wären dann die Bits, mit denen float intern repräsentiert ist.
Mir ist etwas unklar was du damit bezwecken willst. Benötigst du die die Ausgabe als char Array? sonst würde ja:
1 | |
2 | |
funktionieren. und optional mit der Funktion:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
in ASCII konvertieren. Aber alles nur Theorie, testen konnte ich es jetzt noch nicht...
Mit GCC würd ich das so machen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
Danke für die Lösungen für mein Problem. Nach einem Blick ins C-Buch würde eine union mit einer float-, und (32bit)integer-Variable auch zum umwandeln reichen. Am besten gefällt mir aber die pointer-Variante. Nochmals Danke für eure Hilfe.
Gast
#2913699
Fabian K. schrieb: > Nach einem Blick ins C-Buch würde eine > union mit einer float-, und (32bit)integer-Variable > auch zum umwandeln reichen. Eine union wandelt nix um, sondern interpretiert die Bits nur anders ;-)
Fabian K. schrieb: > Danke für die Lösungen für mein Problem. > > Nach einem Blick ins C-Buch würde eine > union mit einer float-, und (32bit)integer-Variable > auch zum umwandeln reichen. Dann ist es aber ein schlechtes C-Buch, denn selbiges hat undefined behavior (wegen type punning). > Am besten gefällt mir aber die pointer-Variante. Ditto, wegen strict Aliasing.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.