Thema: Delphi Binärzahlen eingeben.

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#5

Re: Binärzahlen eingeben.

  Alt 3. Okt 2009, 15:55
Wenn es in Pascal sein soll, dann kann man (abgesehn von der ASM-Variante) maximal noch Funktionen wie BinToInt verwenden oder Dergleichen.
Die Delphi-Syntax hat da leider nichts zu bieten

[add]
Zitat von Aphton:
Interessant wäre noch die Möglichkeit, Variablen < Byte (so wie in C++) definieren zu können, anstatt mit Bitoperationen rumzufuchteln.
Über einen kleinen Umweg geht auch soetwas ab D2006.
Und vom internen Code her dürfte es wohl auf ein ähnliches Ergebnis kommen, wie in C++.
Halt nur mit ein bischen mehr Arbeit verbunden.
Delphi-Quellcode:
Type
  TDateFields = packed Record
  Private
    _Value: LongInt;
    Function GetWeekDay: Byte; Inline;
    Procedure SetWeekDay(x: Byte); Inline;
    Function GetDay: Byte; Inline;
    Procedure SetDay (x: Byte); Inline;
    Function GetMonth: Byte; Inline;
    Procedure SetMonth (x: Byte); Inline;
    Function GetYear: Byte; Inline;
    Procedure SetYear (x: Byte); Inline;
  Public
    Property Value: LongInt Read _Value Write _Value;
    Property WeekDay: Byte Read GetWeekDay Write SetWeekDay;
    Property Day: Byte Read GetDay Write SetDay;
    Property Month: Byte Read GetMonth Write SetMonth;
    Property Year: Byte Read GetYear Write SetYear;
  End;

Function TDateFields.GetWeekDay: Byte;
  Begin
    Result := _Value {shr 0} and $07;
  End;

Procedure TDateFields.SetWeekDay(x: Byte);
  Begin
    _Value := (_Value and not $07) or ((x and $07) {shr 0});
  End;

Function TDateFields.GetDay: Byte;
  Begin
    Result := _Value shr 3 and $31;
  End;

Procedure TDateFields.SetDay(x: Byte);
  Begin
    _Value := (_Value and not $31) or ((x and $31) shr 3);
  End;

Function TDateFields.GetMonth: Byte;
  Begin
    Result := _Value shr 9 and $15;
  End;

Procedure TDateFields.SetMonth(x: Byte);
  Begin
    _Value := (_Value and not $15) or ((x and $15) shr 9);
  End;

Function TDateFields.GetYear: Byte;
  Begin
    Result := _Value shr 14 {and $255};
  End;

Procedure TDateFields.SetYear(x: Byte);
  Begin
    _Value := (_Value and not $255) or ((x {and $255}) shr 14);
  End;
Aber eigentlich wäre soetwas doch eine gute erweiterung für Delphi?
So als neue Syntax für die Property

Property Day: Byte Read _Value : 3 : 5 Write _Value : 3 : 5; oder irgendwie so (Variable : ab welchem Bit : für vieviele Bits)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat