float bitweise auslesen



  • Hallo Leute,

    ich habe sowas

    float rawTimeStmp = 12.3456;
    bool datastream[100];
    
    // nun muss ich 'rawTimeStmp' an stelle 10 und fortlaufend
    // also 10+32 = 42 schreiben.
    //
    
    for (int i=31, int k=10; i>-1; i--, k++)
    {
         if ((rawTimeStmp)&(1<<j)) datastream[k] = true; 
    }
    

    Aber Bitoperationen sind nicht definiert für Gleitkommazahlen oder?
    Was kann ich machen?



  • Die Bitoperatoren sind nicht ganz so einfach. Also ich würde folgendes machen. Ich würde ein reinterpret_cast auf ein unsigned int/DWORD machen und dann über ein enum arbeiten.

    Dh im Enum den Gegenwert als Unsigned für jede Stelle speichern und dann mit Bitoperatoren (and, or, xor) die stellen verändern. und das ding am ende wieder in ein float zurück Reinterpretieren, das sollte eigentlich gehen.



  • Danke schonmal, ich hab nur folgendes im Kopf:

    Es gibt ja eine möglichkeit z.B. aus einem "Datenstrom" ein Doublewert rauszuholen
    z.B.

    float wert = *(float*)&datastrom[20];
    

    damit schreibt ja er alles ab index 20 bis 20+32 von datastrom[] in den float wert raus..gibt es jetzt anders herum vielleicht eine Möglichkeit eine float auf einen datenstrom rauszuschreiben?



  • Soweit ich das mal gelesen habe (weiß nicht ob es 100%ig stimmt) war das man nicht was kleienr als 1Byte ist bekommt, somit fällt das Bitweise auslesen Flach, außer eben über diesen trick mit dem Enum, das wird übrigends ua von DX für Flags benutzt.



  • Ich wollt nur noch mal sagen das es tatsächlich funktioniert wenn ich

    unsigned char datastrom[40];
    float wert=12.3456789;
    //und dann einfach umgekehrt
    *(float*)&datastrom[20] = wert;
    // damit ist an stelle datastrom[20] bis datastrom[23] die float zahl abgespeichert
    // Nun kann auf datastrom zugegriffen werden z.B.
    if ((datastrom[20]&(1<<5)) printf("an stelle 5 in datastrom[20] ist ein bit gesetzt");
    

    Ich sage ausdrücklich "es funktioniert" aber nicht "es ist eine Standardlösung"


Anmelden zum Antworten