Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.748 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: 32 Bit Wert verschieden interpretieren

  Alt 17. Mai 2012, 18:34
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...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat