Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ASCII Code in Binär Code? (https://www.delphipraxis.net/2426-ascii-code-binaer-code.html)

Piwi 22. Jan 2003 21:02


ASCII Code in Binär Code?
 
Tach,

Ascii Code hab ich über ein Edit Feld über den Befehl ord(key) in ein panel einlesen lassen. jetzt will ich erreichen, dass auf diesem Panel der ascii code des eingetippten buchstaben auf buttondruck in den entsprechenden binärcode umgewandelt wird.

ich bin mit einer forschleife folgendermaßen vorgegangen:

Code:
procedure TForm1.binaerbuttonClick(Sender: TObject);
var dezimalzahl,startwert,dualziffer,i:integer;
begin
dezimalzahl:=strtoint(ausgabe.caption);
startwert:=128;
ausgabe.caption:='';

for i:=1 to 8 do begin
dualziffer:=startwert div dezimalzahl;
ausgabe.caption:=inttostr(ausgabe.caption)+dualziffer;
dezimalzahl:=startwert mod dezimalzahl;
startwert:=startwert div 2;
end; //of for
end;
Der Fehler soll Delphi nach in der Schleife dort in der zweiten Reihe liegen. Ich muss es hinbekommen, dass er die 8 Stellen aneinander reiht, da muss der Fehler liegen, HELP! :)

Danke im Vorraus! :witch: [/code]

Snoop007 22. Jan 2003 21:08

ich hoffe es hilft :)
Code:
unit binary;

interface


uses SysUtils;

  function StrToBin(z : char) : string;
  function StrToBinX(z : char) : string;
  function BinXToStr(s : string) : integer;
implementation

function StrToBinX(z : char) : string;
var
  zeichen : integer;
  ergebnisbin : string;
begin
  zeichen := ord(z);
  while trunc(zeichen) <> 0 do
  begin
    ergebnisbin := IntToSTr(zeichen mod 2) + ergebnisbin;
    zeichen := trunc(zeichen / 2);
  end;
  while length(ergebnisbin) <> 8 do
  begin
    ergebnisbin := '0' + ergebnisbin;
  end;
  result := ergebnisbin;
  ergebnisbin := '';
end;

function StrToBin(z : char) : string;
var
  zeichen : integer;
  ergebnisbin : string;
begin
  zeichen := ord(z);
  while trunc(zeichen) <> 0 do
  begin
    ergebnisbin := IntToSTr(zeichen mod 2) + ergebnisbin;
    zeichen := trunc(zeichen / 2);
  end;
  result := ergebnisbin;
  ergebnisbin := '';
end;

function BinXToStr(s : string) : integer;
var
  i,z : integer;
  u : byte;
begin
  s := trim(s);
  z := 0;
  u := 128;
  for i := 1 to length(s) do
  begin
    z := z + StrToInt(s[i]) * u;
    u := u div 2;
  end;
  result := z;
end;

end.

Snoop007 22. Jan 2003 21:09

der aufruf und in die ueses binary einbinden :)

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  i : word;
  zeichen : string;
  leer : string[1];
  zeichen8 : byte;
  zeichen8S : string[8];
begin
  case RadioGroup1.ItemIndex of
    0:
      begin
        if CheckBox1.Checked then
          leer := ' '
        else
          leer := '';
        for i := 1 to length(Memo1.Lines.Text) do
        begin
          zeichen := zeichen + StrToBinX(Memo1.Lines.Text[i]) + leer;
        end;
        Memo2.Lines.Text := zeichen;
        zeichen := '';
      end;
    1:
      begin
        i := 1;
        zeichen8 := 0;
        repeat
          if (Memo1.Lines.Text[i] <> ' ') and ((Memo1.Lines.Text[i] = '1') or (Memo1.Lines.Text[i] = '0')) then
          begin
            repeat
              zeichen8S := zeichen8S + Memo1.Lines.Text[zeichen8+i];
              inc(zeichen8);
            until zeichen8 = 8;
          zeichen := zeichen + Char(BinXToStr(zeichen8S));
          zeichen8 := 0;
          zeichen8S := '';
          i := i + 7;
          end;
        inc(i);
        until i >= length(Memo1.Lines.Text);
        Memo2.Lines.Text := zeichen;
      end;
    end;
end;
[/quote]

Piwi 22. Jan 2003 21:12

Oh Mann :mrgreen:

Geht es auch einfacher? :mrgreen: Die Befehle, die ich eingetippt habe genügen völlig mann, da muss nur irgend ne scheiss kleinigkeit verändert werden :mrgreen:

Trotzdem hat dein Code mich auf ne Idee gebracht... :bounce1:

Piwi 22. Jan 2003 21:18

Code:
procedure TForm1.binaerbuttonClick(Sender: TObject);
var dezimalzahl,startwert,dualziffer,i:integer;
begin
dezimalzahl:=strtoint(ausgabe.caption);
startwert:=128;
ausgabe.caption:='';

for i:=1 to 8 do begin
dualziffer:=startwert div dezimalzahl;
ausgabe.caption:='ausgabe.caption'+inttostr(dualziffer);
dezimalzahl:=startwert mod dezimalzahl;
startwert:=startwert div 2;
end; //of for
end;
So funktioniert das Programm jetzt, allerdings gehts noch net richtig, weil er mault, ich würde Division durch Null machen! Dabei hab ich doch extra den Div-Befehl bzw den Mod-Befehl benutzt!

burnzzz 19. Jun 2006 00:09

Re: ASCII Code in Binär Code?
 
hallo, klingt zwar komisch, aber kann mir
jmd. die binären zahlen für folgende buchstaben nennen?

b
j
ö
r
n

vielen dank, björn

_frank_ 19. Jun 2006 00:54

Zitat:

Zitat von Piwi
So funktioniert das Programm jetzt, allerdings gehts noch net richtig, weil er mault, ich würde Division durch Null machen! Dabei hab ich doch extra den Div-Befehl bzw den Mod-Befehl benutzt!

div hat nix mit "Schutz vor Division durch 0" zu tun, sondern ist lediglich eine Integer-division, und 0 gehört auch zu den Integern dazu...

weiterhin wandelst du den String, der immer eine Zahl sein muss (keine Buchstaben) in einen Integer. um buchstaben zu wandeln musst du für jedes zeichen die ord-funktion aufrufen, die gibt duir den ascii/ansi-wert.

brauchst ja eigentlich nur die StrToBin-Funktion von Snoop007 und die für jedes zeichen deines strings machen (z.B. per for-schleife). Schau dir die funktion einfach mal an, so kompliiziert ist es nicht...die anderen Funktionen brauchst du nicht, soweit ich das sehe...die demo zeigt halt alle funktionen, daher bisschen viel...

HTH Frank


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