Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Binärzahl in ASCII Schriftzeichen umwandeln (https://www.delphipraxis.net/86122-binaerzahl-ascii-schriftzeichen-umwandeln.html)

hirnstroem 9. Feb 2007 12:18


Binärzahl in ASCII Schriftzeichen umwandeln
 
'loha Folks,

wie bekomme ich es hin, dass zum Beispiel Binär (0)1000001 in das Schriftzeichen A umgewandelt wird?

Grüsse
hirnstroem

Klaus01 9. Feb 2007 12:23

Re: Binärzahl in ASCII Schriftzeichen umwandeln
 
Wenn Dir der Binärwert als String vorliegt dann geht das so wie hier beschrieben -> http://www.delphipraxis.net/internal...ct.php?p=31291

Ach, den Integerwert mußt Du dann noch in ein Char wandeln chr(i);

Oder den Code hier verwenden, ist etwas kürzer:

Delphi-Quellcode:
function BinToInt(Value: String): LongInt;
var
  i,Size: Integer;
begin
  Result:=0;
  Size:=Length(Value);
  for i:=Size downto 0 do
  begin
    if Copy(Value,i,1)='1' then
      Result:=Result+(1 shl i);
  end;
end;

Grüße
Klaus

hirnstroem 9. Feb 2007 12:39

Re: Binärzahl in ASCII Schriftzeichen umwandeln
 
Vielen Dank Klaus!

Die Chr Routine war die Lösung.

Grüsse
hirnstroem

Nils_13 9. Feb 2007 12:42

Re: Binärzahl in ASCII Schriftzeichen umwandeln
 
Lass mich raten, das wird ein Assembler ? Da würdest du das nämlich auch brauchen.

hirnstroem 9. Feb 2007 12:57

Re: Binärzahl in ASCII Schriftzeichen umwandeln
 
Es wird kein Assembler, du darfst weiter raten : )

Nein, ich verwende dies letztenendes dafür, um den Code spezieller Schlüssel, welche von einem Fotochip optisch erfasst werden können, unkenntlich zu machen, dabei noch ein Paar Zeichen einzusparen und trotzdem noch eine dem jeweiligen Schlüssel eindeutig zuordenbare Nummer zuzuteilen von welcher sich nicht ohne weiteres auf den Code des Schlüssels schliessen lässt und welche aus ASCII Zeichen besteht. Dies wiederum wird benötigt um beim erfassen eines Schlüssels sichergehen zu können, dass das Gerät auch wirklich den richtigen Schlüssel erkannt hat.

Christian Seehase 9. Feb 2007 16:51

Re: Binärzahl in ASCII Schriftzeichen umwandeln
 
Moin Klaus,

bitte niemals Bitmanipulationen mit + vornehmen, auch wenn es in diesem Falle funktioniert.
Man kann sich das zu leicht für Fälle angewöhnen, in denen es zu falschen Ergebnissen führt.

Bit(s) setzen mit:
Ergebnis = Wert OR Bitmaske
Bit(s) löschen mit:
Ergebnis = Wert AND NOT Bitmaske
Bit(s) abfragen mit:
Ergebnis = Wert AND Bitmaske

Bit(s) bzw. Bitmaske, da es sich ja nicht immer zwingend um einzelne Bits drehen muss, sondern auch mal um Kombinationen.
Deshalb sollte man auch nie +/- hierfür verwenden, da das Ergebnis dann auch ungültig für den jeweiligen Anwendungszweck werden könnte.

xaromz 9. Feb 2007 16:59

Re: Binärzahl in ASCII Schriftzeichen umwandeln
 
Hallo,

wo werden denn hier Bits manipuliert? Da werden doch nur (Dezimal-)Zahlen addiert. Und das ist auch korrekt so.

Gruß
xaromz

Hawkeye219 9. Feb 2007 18:13

Re: Binärzahl in ASCII Schriftzeichen umwandeln
 
Hallo,

Zitat:

Zitat von xaromz
wo werden denn hier Bits manipuliert? Da werden doch nur (Dezimal-)Zahlen addiert. Und das ist auch korrekt so.

Ich denke, beides ist korrekt. Natürlich werden 2 Dezimalzahlen addiert, man kann es aber auch als Manipulation eines Bits betrachten. Und in diesem Fall sollte man dann Christians Hinweis beachten. So oder so - Klaus' Routine arbeitet leider nicht ganz korrekt. Der Zugriff auf das Zeichen mit Index 0 ist nicht zulässig, und die Wertigkeit der einzelnen Bits wird falsch berechnet.

Ich würde es so lösen:

Delphi-Quellcode:
function BinToInt (const Value: String): Cardinal;
var
  i : Integer;
begin
  Result := 0;
  for i := 1 to Length(Value) do
    Result := 2 * Result + Ord(Value[i] <> '0');
end;
Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 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