AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Dezimal -> Binär

Ein Thema von Elexarie · begonnen am 15. Sep 2012 · letzter Beitrag vom 16. Sep 2012
Antwort Antwort
Elexarie

Registriert seit: 7. Apr 2011
32 Beiträge
 
#1

Dezimal -> Binär

  Alt 15. Sep 2012, 12:20
Hallo Community,

folgender Quellcode gibt bei mir irgendwie Unsinn aus:

Code:
function CharToBin(ordinary: integer): string;
var ergebnis : integer;
begin

  while ordinary > 0 do

  begin
    ergebnis := ordinary mod 2;
    if ergebnis = 1 then
      result := '1' + result
    else
      result := '0' + result;
    ordinary := ordinary div 2;
  end;

end;
Code:
Funktionsaufruf:
procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin
  Memo2.Lines.Clear();
  OpenPictureDialog1.Execute(); // Öffnen des Öffnen - Dialogs
  Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); // Laden des Bildes;

  for i := 0 to Length(Memo1.Text) do
  begin

    Memo2.Text := Memo2.Text + CharToBin(ord(Memo1.Text[i]));

  end;

end;
Ein einzelner Buchstabe wird korrekt ausgegeben. Bei zwei bekomme ich irgendwie 3 Binärcodes und naja. irgendwas stimmt nicht und ich finde den Fehler von der Logik nicht. :S
  Mit Zitat antworten Zitat
Elexarie

Registriert seit: 7. Apr 2011
32 Beiträge
 
#2

AW: Dezimal -> Binär

  Alt 15. Sep 2012, 12:28
Hab den Fehler gefunden. Es lag am Memo1.Text + Funktionsaufruf.

Jetzt ist meine Frage.

Mein Code wird irgendwie rückwärts ausgegeben, ist das richtig?! :O

http://imagr.eu/up/505459fd6ddc92_Unbenannt.png

Geändert von Elexarie (15. Sep 2012 um 12:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Dezimal -> Binär

  Alt 15. Sep 2012, 12:38
Mein Code wird irgendwie rückwärts ausgegeben, ist das richtig?! :O
Du hast doch diesen Code geschrieben ... Das mußt du doch wissen?

Aber ja, du fügst die kleinesten Bits vorne in den Ergebnis-String ein, also ja, wenn du rückwärts schreibst, dann ist das Ergebnis auch rückwärts.

Und du solltest dir unbedingt angewöhnen deine Result-Variablen zu initialisieren.

Delphi-Quellcode:
function CharToBin(ordinary: integer): string;
var ergebnis : integer;
begin
  Result := '';
  while ordinary > 0 do
Result hat hier nur zufällig gleich beim Start einen Leerstring drin und das muß nicht immer so sein, also solltest du unbedingt dafür sorgen, daß es immer so ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Dezimal -> Binär

  Alt 15. Sep 2012, 12:41
// Deteted
ich hatte Hex2Bin gelesen, sorry ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi (15. Sep 2012 um 15:54 Uhr) Grund: Lapsus
  Mit Zitat antworten Zitat
Elexarie

Registriert seit: 7. Apr 2011
32 Beiträge
 
#5

AW: Dezimal -> Binär

  Alt 15. Sep 2012, 12:51
Wenn ich bei am Beginn meiner CharToBin Funktion
Code:
Result := '';
verwende, dann gibt meine Funktion nichts mehr an den Aufruf weiter.

Wenn ich Result nicht initialisiere funktioniert der folgende Code:

Code:


function CharToBin(ordinary: integer): string;
var ergebnis : integer;
begin

  while ordinary > 0 do

  begin
    ergebnis := ordinary mod 2;
    if ergebnis = 1 then
      result := '1' + result
    else
      result := '0' + result;
    ordinary := ordinary div 2;
  end;
end;


procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin
  Memo2.Lines.Clear();
  OpenPictureDialog1.Execute(); // Öffnen des Öffnen - Dialogs
  Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); // Laden des Bildes;

  for i := Length(Memo1.Text) downto 0 do
  begin

    Memo2.Text := CharToBin(ord(Memo1.Text[i]));


  end;
while Length(Memo2.Text) mod 3 > 0 do
Memo2.Text := Memo2.Text + '0';
ShowMessage(inttostr(Length(Memo2.Text)));
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Dezimal -> Binär

  Alt 15. Sep 2012, 13:00
// Deteted
ich hatte Hex2Bin gelesen, sorry 2...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi (15. Sep 2012 um 15:54 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Dezimal -> Binär

  Alt 15. Sep 2012, 13:02
Hast du das Result auch am Begin der function (vor dem while) stehen? Außerdem, das mit dem Rückwärts kann nicht stimmen, du schreibst ja 0/1 + Result statt Result + 0/1. Und Strings beginnen in Delphi mit 1 und Memo.Text ist ein String.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Dezimal -> Binär

  Alt 15. Sep 2012, 13:06
Wenn ich Result nicht initialisiere funktioniert der folgende Code:
Einfach mal alles durchlesen.
http://www.delphipraxis.net/170301-r...efensuche.html


Tipp: Wenn dein Code nicht funktioniert und du weißt nicht warum,
dann könnte man den Debugger verwenden und sich ansehn, was der Code überhaupt macht und was da nicht so läuft, wie man es gern hätte.


if ergebnis = 1 then und if Ord(ergebnis) then kommt fast auf das Selbe raus.
Hier kommt es sogar genau auf's Selbe raus da ordinary nur positive Werte enthält.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Dezimal -> Binär

  Alt 16. Sep 2012, 12:29
wie wäre es ein Byte zu übersetzen?
Delphi-Quellcode:
function BytetoBin(inb:byte):string;
type
  tnibbbin = string[4];
const
  ba : array [0..15] of tnibbin=('0000','0001',
                                 '0010','0011',
                                 '0100','0101',
                                 '0110','0111',
                                 '1000','1001',
                                 '1010','1011',
                                 '1100','1101',
                                 '1110','1111')
begin
  result:=ba[inb shr 4 ]+ba[inb and $0F];
end;

...
{für 8Bit Char }
ergeb:='';
for i:=1 to length(mystring) do
  ergeb:=ergeb+BytetoBin(Byte(mystring[i]));
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:13 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