AVR float --> 32bit WORD

OP #2912884
Lesenswert?
• ▲
▼
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 #2912930
Lesenswert?
• ▲
▼
Bin mir nicht sicher, ob ich das Problem richtig verstanden habe. Aber 
vielleicht möchstest Du einfach nur das hier:
1
float f = -1.4568;
2
uint32_t word = *((uint32_t*) &f);

Das wären dann die Bits, mit denen float intern repräsentiert ist.
#2912938
Lesenswert?
• ▲
▼
Mir ist etwas unklar was du damit bezwecken willst. Benötigst du die die 
Ausgabe als char Array?

sonst würde ja:
1
float fvalue = 1.2345;
2
long lvalue = (long)*((long*)(&fvalue)); //umwandeln des float pointers in longpointer und als long Variable auslesen
funktionieren.


und optional mit der Funktion:
1
/*
2
** convert long int to binary string
3
*/
4
void ltob(char * buf, unsigned long val)
5
{
6
  signed char i;
7

8
  buf+=32;
9
  *buf-- = 0;
10
  
11
    for (i=31; i>=0; i--) {
12
        *buf-- = val%2 + '0';
13
        val >>= 1;
14
    }
15
}

in ASCII konvertieren.

Aber alles nur Theorie, testen konnte ich es jetzt noch nicht...
Persönliche Seite #2915293
Lesenswert?
• ▲
▼
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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.