cpp / expert
Snippet
Manuelles Bit-Feld-Packing für speicherbegrenzten Status
Experten-Speichermanagement unter Verwendung bitweiser Operationen, um mehrere logische Felder in ein einziges Byte zu packen. Dies ist entscheidend für eingebettete Systeme, Hochfrequenzhandel oder Netzwerke, wo jedes Byte Overhead zählt.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
struct CompactState {uint8_t data;void setReady(bool b) { data = (data & ~0x01) | (b ? 0x01 : 0x00); }bool isReady() const { return data & 0x01; }void setErrorCode(uint8_t code) { data = (data & ~0xFE) | ((code & 0x7F) << 1); }uint8_t getErrorCode() const { return (data >> 1) & 0x7F; }};// Total size: 1 byte for 1 bool and a 7-bit error code.
Erklärung
1
data & ~0x01
Löscht das erste Bit, während alle anderen Bits im Byte erhalten bleiben.
2
(code & 0x7F) << 1
Maskiert die Eingabe auf 7 Bits und verschiebt sie, um die oberen Bits des Bytes zu belegen.