c / expert
Snippet
Strukturierte binäre Header-Packung mit expliziten Bitfeld-Spezifizierern
Illustriert Datenpackung auf Bitebene durch C-Struktur-Bitfelder in Kombination mit Compiler-Packing-Attributen, um binaere Protokollstrukturen direkt ohne manuelle Bitmaskierung zu modellieren.
snippet.c
c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>#include <stdint.h>typedef struct __attribute__((__packed__)) {uint8_t version : 4;uint8_t ihl : 4;uint8_t tos : 8;uint16_t length : 16;uint16_t id : 16;uint16_t flags : 3;uint16_t fragment : 13;} PacketHeader;void parse_header(const PacketHeader* hdr) {uint8_t ver = hdr->version;uint16_t frag_offset = hdr->fragment;(void)ver; (void)frag_offset;}
Erklärung
1
__attribute__((__packed__))
Deaktiviert Speicher-Auffüllbytes (Padding) zwischen benachbarten Bitfeld-Bytegrenzen.
2
uint8_t version : 4;
Beschränkt die Allokationsbreite des Strukturmitglieds explizit auf 4 Bits Speicherplatz.
3
uint16_t fragment : 13;
Allokiert ein nicht-byte-ausgerichtetes 13-Bit-Feld innerhalb eines 16-Bit-Speicherbehälters.