AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

0b0111 in Delphi-Sprache

Ein Thema von StTüff · begonnen am 6. Nov 2003 · letzter Beitrag vom 7. Nov 2003
Antwort Antwort
Seite 3 von 3     123   
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#21

Re: 0b0111 in Delphi-Sprache

  Alt 6. Nov 2003, 19:19
Moin Daniel,

Zitat von Daniel B:
Einigen wir uns darauf das es die in Delphi 7 und sehr warscheinlich auch in Delphi 6 und nicht in Delphi 5 gibt?
Können wir machen.

Spider hat, wie in seinem Profil angegeben D5...

Jetzt kommst Du wieder
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: 0b0111 in Delphi-Sprache

  Alt 6. Nov 2003, 19:24
Hi StTüff,
hiermit kannst'e dir 'ne Unit mit einigen binären Konstanten erstellen:

Einfach die entstehende Unit in dein Projekt einbinden und schon hast du Konstanten in der Form Bxxxx, Bxxxxxxxx, Bxxxx_xxxx u.v.m. (x = 0 oder 1)


Add: Ich wollte nur noch sagen, das diese Units nicht komplett ins Projekt übernommen werden.
Ob man nun direkt $0F schreibt oder B00001111 aus der Unit nimmt, macht keine Unterschied in der Größe der EXE, da der Compiler statt B00001111 den entsprechenden Wert schreibt.

Update: BinConstX.dpr
Angehängte Dateien
Dateityp: dpr binconstx_107.dpr (5,4 KB, 8x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#23

Re: 0b0111 in Delphi-Sprache

  Alt 6. Nov 2003, 19:26
Eine Alternative:

Delphi-Quellcode:
function ByteToBinWord(AByte : Byte) : LongWord;
begin
  result := AByte and $01;

  result := result + (((AByte shr 1) and $01) * 10);
  result := result + (((AByte shr 2) and $01) * 100);
  result := result + (((AByte shr 3) and $01) * 1000);
  result := result + (((AByte shr 4) and $01) * 10000);
  result := result + (((AByte shr 5) and $01) * 100000);
  result := result + (((AByte shr 6) and $01) * 1000000);
  result := result + (((AByte shr 7) and $01) * 10000000);
end;

function BinWordToByte(ABinWord : LongWord) : Byte;
begin
  result := 0;
  result := result + ((ABinWord div 10000000) shl 7); ABinWord := ABinWord mod 10000000;
  result := result + ((ABinWord div 1000000) shl 6); ABinWord := ABinWord mod 1000000;
  result := result + ((ABinWord div 100000) shl 5); ABinWord := ABinWord mod 100000;
  result := result + ((ABinWord div 10000) shl 4); ABinWord := ABinWord mod 10000;
  result := result + ((ABinWord div 1000) shl 3); ABinWord := ABinWord mod 1000;
  result := result + ((ABinWord div 100) shl 2); ABinWord := ABinWord mod 100;
  result := result + ((ABinWord div 10) shl 1); ABinWord := ABinWord mod 10;
  result := result + ABinWord;
end;

function ByteToBinStr(AByte : Byte) : String;
begin
  result := IntToStr(ByteToBinWord(AByte));
  while (length(Result) < 8) do
    result := '0' + result;
end;

function BinStrToByte(ABinStr : String) : Byte;
begin
  result := BinWordToByte(StrToIntDef(ABinStr, 0));
end;
So kann man 8 Nullen und Einsen in einen LongWord packen und wieder als Byte oder String zurückholen.
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#24

Re: 0b0111 in Delphi-Sprache

  Alt 6. Nov 2003, 19:27
Zeifx nochmal.
Kauft Euch mal ein anständiges Delphi.

Das ist immer das gleiche mit dem D5, da fehlt ja die hälfte, wie kann man nru noch damit arbeiten!? D6 sollte mal langsam schon drin sein.

Aber was solls, Du hattest was D5 angeht recht und somit gibst Du einen aus.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: 0b0111 in Delphi-Sprache

  Alt 7. Nov 2003, 10:49
@Daniel B er will das ja im QuellCode zur besseren lesbarkeit nutzen.

BinToHex hilft hier ja nichts, er müsste ja sonst sowas wie BinToHex('1001010010', Hex) und dann noch HexToInt(Hex, Int) machen. Damit wird der QuellCode ja nicht gerade besser lesbarer.


Delphi-Quellcode:
(* Von Vorhin: *)
I := Bxxxx; {jeweils mit fester Bit-Anzahl}
I := Bxxxxxxxx; {4/8/16/32 Bit's}
I := Bxxxxxxxxxxxxxxxx;
I := Bxxxxxxxx_xxxxxxxx;
...
{ist der schnellte Weg - das Programm wird nicht langsamer, da keine zusätzlichen Routinen zur dekodierung eingebunden werden}

(* Mit Code 1 (siehe unten): *)
I := B(xxx); {1 - 10 Bit's}

(* Mit Code 2 (siehe unten): *)
I := B('xxx'); {1 - 32 Bit's}
Delphi-Quellcode:
(* Code 1 *)
Function B(I: LongWord): Word;
  Var A: Word;

  Begin
    Result := $00;
    A := $01;
    While I > 0 do Begin
      If I mod 10 > 0 Then Result := Result or A;
      I := I div 10;
      A := A shl 1;
    End;
  End;

(* Code 2 *)
Function B(I: String): LongWord;
  Begin
    Result := $0000;
    While I > 'do Begin
      Result := Result shl 1;
      If I[1] <> '0Then Result := Result or $0001;
      Delete(I, 1, 1);
    End;
  End;
Diese Routinen sind so geschrieben, das sie auch bei Fehleingaben (keine Binärwerte) ohne Exception durchlaufen. Sie reagieren auf Bit = '0' > 0 und Bit <> '0' > 1. Im Code 2 kommt es zum Überlauf (falscher Wert wird zurückgegen), wenn mehr als 32 Bit übergeben werden.

Es besteht noch die Möglichkeit "Code 2" so zu erweitern, das man auch Trennzeichen zur noch besseren lesbarkeit im Binärwert verwenden kann.
z.B.: I := B('xxxx xx xx');
Delphi-Quellcode:
(* Code 2 - erweitert *)
Function B(I: String): LongWord;
  Begin
    Result := $0000;
    While I > 'do Begin
      If I[1] <> ' '{Trennzeichen} Then Begin
        Result := Result shl 1;
        If I[1] <> '0Then Result := Result or $0001;
      End;
      Delete(I, 1, 1);
    End;
  End;
Und wenn jetzt noch diese Routinen überladen werden, können beide Parallel genutzt werden.
Delphi-Quellcode:
(* Code 1 *)
Function B(I: LongWord): Word; overload;
  Var A: Word;

  Begin
    Result := $00;
    A := $01;
    While I > 0 do Begin
      If I mod 10 > 0 Then Result := Result or A;
      I := I div 10;
      A := A shl 1;
    End;
  End;

(* Code 2 - erweitert *)
Function B(I: String): LongWord; overload;
  Begin
    Result := $0000;
    While I > 'do Begin
      If I[1] <> ' '{Trennzeichen} Then Begin
        Result := Result shl 1;
        If I[1] <> '0Then Result := Result or $0001;
      End;
      Delete(I, 1, 1);
    End;
  End;
Angehängte Dateien
Dateityp: exe binconst.exe (65,5 KB, 1x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz