Für mich hört sich das sehr danach an als ob du z.B. einen varianten Record suchst... ungetestetes Beispiel, das sollte mit Delphi 2009 schon gehen:
Delphi-Quellcode:
type
TMy4ByteData = packed record
type
TDataType = (dtSingle, dtInteger, dtLongWord);
class operator implicit(const Value: TMy4ByteData): TArray<Byte>;
case DataType: TDataType of
dtSingle:
(ValueAsSingle: Single);
dtInteger:
(ValueAsInteger: Integer);
dtLongWord:
(ValueAsLongWord: LongWord);
end;
// ...
class operator TMy4ByteData.implicit(const Value: TMy4ByteData): TArray<Byte>;
begin
SetLength(Result, 4);
CopyMemory(Pointer(Result), @Value.ValueAsInteger, 4);
end;
procedure Example(const AValue: TMy4ByteData);
begin
case AValue.DataType of
dtSingle:
ShowMessage('Single: ' + FloatToStr(AValue.ValueAsSingle));
dtInteger:
ShowMessage('Integer: ' + IntToStr(AValue.ValueAsInteger));
dtLongWord:
ShowMessage('LongWord: ' + IntToStr(AValue.ValueAsLongWord));
end;
end;
var
Value: TMy4ByteData;
ValueData: TArray<Byte>;
CurrentByte: Byte;
begin
Value.DataType := dtSingle;
Value.ValueAsSingle := 4.5;
Example(Value);
ValueData := Value;
for CurrentByte in ValueData do
ShowMessage(IntToStr(CurrentByte));
end;
Ich sehe schon die rote Box, aber ich poste wegen dem Operator mal trotzdem...