float-wert aus unsigned char* auslesen



  • Hi,

    ich habe Daten in einem 4 Byte langen Byte-Array:

    unsigned char* buffer = (unsigned char*)malloc(4);
    getFloatData(&buffer);

    Wie bekomme ich den Float-Wert da raus?

    Einfach auf float casten "(float)buffer" geht laut Compiler nicht.

    Mit einem 2 oder 4 Byte Integer gehts komischerweise:

    unsigned char* buffer = (unsigned char*)malloc(2);
    getShortIntData(&buffer);
    short int x = (short int)buffer;

    bzw.

    unsigned char* buffer = (unsigned char*)malloc(4);
    getIntData(&buffer);
    int x = (int)buffer;

    Gruß, Thomas 😕



  • man: atof(3)
    man: sscanf(3)

    edit:
    ein char* ist ein Zeiger, ein Cast auf einen Zeiger liefert *nicht* das gewünschte Ergebnis, int x = (int) "3" liefert den Integer Wert der Stelle im Speicher, wo {'3', '\0'} sich befinden!



  • Hi supertux,

    danke für den Tipp!

    Hab mir jetzt noch eine andere Lösung ausgedacht um den typlosen Puffer umgehen zu können. Damit funktionierts einwandfrei.

    Gruß, Thomas



  • ein char* ist ein Zeiger, ein Cast auf einen Zeiger liefert *nicht* das gewünschte Ergebnis, int x = (int) "3" liefert den Integer Wert der Stelle im Speicher, wo {'3', '\0'} sich befinden!

    wenn jemand von (unsigned) char* redet, geht es nicht zwingend auch um strings 😉

    unsigned char* buffer = (unsigned char*)malloc(4);
    

    ...beinhaltet wohl ein float - also einfach den zeiger casten und auswerten:

    float *fp= (float*)buffer;
    float f= *fp;
    


  • hellihjb schrieb:

    ein char* ist ein Zeiger, ein Cast auf einen Zeiger liefert *nicht* das gewünschte Ergebnis, int x = (int) "3" liefert den Integer Wert der Stelle im Speicher, wo {'3', '\0'} sich befinden!

    wenn jemand von (unsigned) char* redet, geht es nicht zwingend auch um strings 😉

    das ist wahr, aber die Art und Weise, wie er gecastet hat war falsch.


Anmelden zum Antworten