char bzw. void in float umwandeln



  • b7f7 schrieb:

    was mich eigentlich wundert ist.
    nach standard darf man
    ...
    und auch zurück
    das impliziert doch eigentlich das
    ...
    dass auch passen sollte

    Wenn du beide Datentypen in eine Union legst, stellst du (oder besser gesagt der Compiler) sicher, dass sie auch ein kompatibles Alignment bekommen. Damit funktioniert dann auch ein "Union Cast" (mal davon abgesehen, dass man laut Standard eigentlich nur auf das zuletzt zugewiesene Element einer Union zugreifen darf).

    Hat man dagegen beide Datentypen getrennt definiert, so kann der Compiler garnicht wissen, dass ein kompatibles Alignment nötig ist. Folgendes Beispiel crasht mit sehr hoher Wahrscheinlichkeit:

    char test[] = "ABCDEFGHIJKL";
    float f;
    char* iter = test;
    for( int i = 0; i < 8; ++i, ++iter) {
       f = *(reinterpret_cast<float*>( iter));
    }
    


  • Unions darf man nicht zum casten verwenden, steht ausdrücklich im Standard.

    Schaut euch doch mal an wieviele Protokolle auf Textbasis sind, hat schon seinen Grund.


Anmelden zum Antworten