c / intermediate
Snippet
Unions für Type-Punning
Unions ermöglichen es, denselben Speicherort als verschiedene Typen zu interpretieren. Dieses 'Type-Punning' wird oft auf mittlerem Niveau verwendet, um die rohe binäre Darstellung von Datentypen wie Floats oder Doubles zu untersuchen, ohne Pointer oder Casts zu verwenden.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>typedef union {float f;unsigned int i;} FloatIntConverter;int main() {FloatIntConverter conv;conv.f = -1.0f;printf("Float: %f, Binary representation (hex): 0x%X\n", conv.f, conv.i);return 0;}
Erklärung
1
typedef union { ... } FloatIntConverter;
Definiert eine Union, bei der alle Member dieselbe Speicheradresse teilen.
2
conv.f = -1.0f;
Speichert einen Float-Wert im gemeinsam genutzten Speicherbereich.
3
conv.i
Greift auf dieselben Speicherbits zu, behandelt sie jedoch als vorzeichenlosen Integer.