![]() |
Dezimal -> Binär
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:
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
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; |
AW: Dezimal -> Binär
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 ![]() |
AW: Dezimal -> Binär
Zitat:
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:
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.
function CharToBin(ordinary: integer): string;
var ergebnis : integer; begin Result := ''; while ordinary > 0 do |
AW: Dezimal -> Binär
// Deteted
ich hatte Hex2Bin gelesen, sorry ... |
AW: Dezimal -> Binär
Wenn ich bei am Beginn meiner CharToBin Funktion
Code:
verwende, dann gibt meine Funktion nichts mehr an den Aufruf weiter.
Result := '';
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. |
AW: Dezimal -> Binär
// Deteted
ich hatte Hex2Bin gelesen, sorry 2... |
AW: Dezimal -> Binär
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.
|
AW: Dezimal -> Binär
Zitat:
![]() 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.
Delphi-Quellcode:
und
if ergebnis = 1 then
Delphi-Quellcode:
kommt fast auf das Selbe raus.
if Ord(ergebnis) then
Hier kommt es sogar genau auf's Selbe raus da
Delphi-Quellcode:
nur positive Werte enthält.
ordinary
|
AW: Dezimal -> Binär
wie wäre es ein Byte zu übersetzen?
Delphi-Quellcode:
Gruß
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])); K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:44 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