C · Avançado · Inglês · Técnico
type punning
Técnica de reinterpretar os bytes de um objeto como outro tipo, por exemplo ler um float como inteiro. Em C é válida via union ou memcpy, mas não via cast de ponteiro.
Onde usar
Aparece em manipulação de bits de float e em parsing binário. Em C, diferente de C++, ler outro membro de uma union é permitido pelo padrão.
Em código
union { float f; uint32_t u; } x;
x.f = 1.0f;
printf("%08x\n", (unsigned)x.u); // 3f800000Exemplos
We use a union for type punning between float and uint32_t.
Usamos uma union para type punning entre float e uint32_t.
Type punning through a pointer cast is undefined behavior.
Type punning por cast de ponteiro é comportamento indefinido.
Cuidado
Fazer o punning com cast de ponteiro, que viola strict aliasing e pode ser otimizado de forma inesperada.