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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren