![]() |
0b0111 in Delphi-Sprache
Hallo zusammen!
Ich habe eine Frage, die bestimmt schon oft gestellt wurde. Ich habe aber leider bei meiner Suche nichts gefunden. Vielleicht erbarmt sich einer einem blöden C-Menschen und sagt mir, wie ich eine binäre Konstante in Delphi angebe. Beispiel: "0b011" in C wird in Delphi so "?" geschrieben. Bei Hex-Darstellung ist das einfach. Beispiel: $0F2. Gibt es da nichts für die binäre Darstellung? Muss ich alles in Hex-Schreibweise angeben? Vielleicht kann mir einer die Augen öffnen. Vielen Dank! StTüff |
Re: 0b0111 in Delphi-Sprache
Ascii wär noch mit #xxx möglich
|
Re: 0b0111 in Delphi-Sprache
Das mit ASCII kenn ich schon. Trotzdem besten Dank.
Naja, ich kanns natürlich auch als HEX angeben. Binär wär's halt übersichtlicher. Gruß, StTüff |
Re: 0b0111 in Delphi-Sprache
Leider geht das in Pascal nicht so direkt. Du musst auf dezimal oder hexadezimal ausweichen.
|
Re: 0b0111 in Delphi-Sprache
Zitat:
|
Re: 0b0111 in Delphi-Sprache
OK! Vielen Dank!
Das hatte ich schon vermutet, ich wollte mich nur noch mal versichern. Bis bals, StTüff |
Re: 0b0111 in Delphi-Sprache
Wer binaer nach hex nicht fluessig im Kopf umrechnen kann der muss noch viel lernen.
|
Re: 0b0111 in Delphi-Sprache
Sei froh. C kann oktal (037 z. B. ist 0x1F) und 08 und 09 sind gueltige Oktalangaben!
|
Re: 0b0111 in Delphi-Sprache
@Robert Marquart
Es geht nicht um das Umrechnen. Dazu bin ich lange genug Softwareentwickler, um das zu können. Es geht aber darum, wie gut der Code lesbar ist. Bei einem Status, bei dem Bits an bestimmten Positionen gestzt werden, ist ein $2A einfach unübersichtlicher als ein 101010. Ich kann das aber auch mit Konstanten lösen. Danke noch mal an alle für die Beiträge. StTüff |
Re: 0b0111 in Delphi-Sprache
Mein Gott, jetzt muss ich mal etwas Peinliches fragen :oops:
Wie bekomm ich den die Hex raus? Ich mein sowas wie strtohex gibt's ja net! |
Re: 0b0111 in Delphi-Sprache
HexToBin - BinToHex
|
Re: 0b0111 in Delphi-Sprache
@Spider,
versuchs mal mit Format. Viele Grüße |
Re: 0b0111 in Delphi-Sprache
T H X!
|
Re: 0b0111 in Delphi-Sprache
Naja geht irngedwie nicht aber ist ja auch egal
|
Re: 0b0111 in Delphi-Sprache
Zitat:
|
Re: 0b0111 in Delphi-Sprache
Zitat:
|
Re: 0b0111 in Delphi-Sprache
Du fauler ************************************ :lol:
Du machst jetzt gefälligst die OH auf und suchst nach HexToBin und umgekehrt!! |
Re: 0b0111 in Delphi-Sprache
|
Re: 0b0111 in Delphi-Sprache
Liste der Anhänge anzeigen (Anzahl: 1)
Moin Christian,
Zitat:
|
Re: 0b0111 in Delphi-Sprache
Um genau zu sein:
Zitat:
Zitat:
|
Re: 0b0111 in Delphi-Sprache
Moin Daniel,
Zitat:
Spider hat, wie in seinem Profil angegeben D5... Jetzt kommst Du wieder :mrgreen: |
Re: 0b0111 in Delphi-Sprache
Liste der Anhänge anzeigen (Anzahl: 1)
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 |
Re: 0b0111 in Delphi-Sprache
Eine Alternative:
Delphi-Quellcode:
So kann man 8 Nullen und Einsen in einen LongWord packen und wieder als Byte oder String zurückholen.
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; |
Re: 0b0111 in Delphi-Sprache
Zeifx nochmal. :mrgreen:
Kauft Euch mal ein anständiges Delphi. :lol: 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. :tongue: |
Re: 0b0111 in Delphi-Sprache
Liste der Anhänge anzeigen (Anzahl: 1)
@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. :mrgreen:
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:
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.
(* 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] <> '0' Then Result := Result or $0001; Delete(I, 1, 1); End; End; 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.:
Delphi-Quellcode:
I := B('xxxx xx xx');
Delphi-Quellcode:
Und wenn jetzt noch diese Routinen überladen werden, können beide Parallel genutzt werden.
(* 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] <> '0' Then Result := Result or $0001; End; Delete(I, 1, 1); End; End;
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] <> '0' Then Result := Result or $0001; End; Delete(I, 1, 1); End; End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz