Zitat von
Aphton:
Gibts ne Möglichkeit, Embarcadero oder halt den Zuständigen das vorzuschlagen?
Delphi-Quellcode:
TBitFields = record
case Boolean of
False: ( x0, x1, x2, x3, x4, x5, x6, x7: Byte:1; ); // all diese Elemente besetzen nur 1 Bit
True: ( x: Byte );
end;
Früher ging das mit
Delphi-Quellcode:
TBitFields = packed record
case Boolean of
False: ( x0, x1, x2, x3, x4, x5, x6, x7: Boolean);
True: ( x: Byte );
end;
heute nicht mehr. Der Grund ist einfach der, das die gepackte Darstellung kaum noch gebraucht wird, performancetechnisch einfach grauenhaft ist und das genaue Packverfahren, sowie die Reihenfolge im Speicher nicht immer klar definiert ist. Auf Bitebene sollte das zwar klar sein, aber schon bei Bytes verhält sich eine Intel-CPU anders als eine Motorola: Der gleiche Code würde auf einer anderen CPU zu anderen Ergebnissen führen, weil die Bytes vertauscht sind: Der Code ist nicht mehr deterministisch und damit unbrauchbar.
Besser (und vom Verständnis her sinnvoller) ist es doch, das Kodieren in einzelne Bits explizit selbst zu übernehmen. So schwer ist das doch nicht, und wurde hier schon exemplarisch erklärt.
Zudem sollte eine Kodierung nicht Bestandteil der Deklaration sein. Passt irgendwie nicht.