AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zahlen umwandeln (Bin, Oct, Dec, Hex)

Ein Thema von Morlon · begonnen am 15. Dez 2004 · letzter Beitrag vom 31. Dez 2004
Antwort Antwort
Seite 2 von 2     12   
Morlon

Registriert seit: 15. Dez 2004
Ort: Dillingen
38 Beiträge
 
Delphi 7 Professional
 
#11

Re: Zahlen umwandeln (Bin, Oct, Dec, Hex)

  Alt 15. Dez 2004, 14:39
Also hier der überarbeitete Quelltext mit vielem Kommentaren, damit auch jeder versteht was gemacht wird

Grüße
Elmar
Angehängte Dateien
Dateityp: zip zahlwandler.zip (11,3 KB, 100x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#12

Re: Zahlen umwandeln (Bin, Oct, Dec, Hex)

  Alt 15. Dez 2004, 14:46
Hallo,

Zitat von Morlon:
... Result := arrHex[ZwErgInt] + Result; ...
geht so:
Result := arrHex[Trunc(ZwErgInt)] + Result;
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#13

Re: Zahlen umwandeln (Bin, Oct, Dec, Hex)

  Alt 15. Dez 2004, 15:37
Delphi-Quellcode:
procedure ArrClear(PArr: typBin);
var i: integer;
begin
  for i := 1 to 100 do arrBin[i] := False;
end;
geht viel schneller:

ZeroMemory(@arrBin, sizeof(arrBin));
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#14

Re: Zahlen umwandeln (Bin, Oct, Dec, Hex)

  Alt 16. Dez 2004, 06:47
Hallo,

statt
Zitat von Oxmyx:
ZeroMemory(@arrBin, sizeof(arrBin));
kann man auch
FillChar(arrBin, SizeOf(arrBin), 0); verwenden, da ZeroMemory auch nichts anderes macht.
  Mit Zitat antworten Zitat
Morlon

Registriert seit: 15. Dez 2004
Ort: Dillingen
38 Beiträge
 
Delphi 7 Professional
 
#15

Re: Zahlen umwandeln (Bin, Oct, Dec, Hex)

  Alt 22. Dez 2004, 12:37
huch, falscher Knopf, bitte löschen.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

Re: Zahlen umwandeln (Bin, Oct, Dec, Hex)

  Alt 22. Dez 2004, 14:07
Zitat von Morlon:
ich hab mir grad mühevoll ein kleines Progi geschrieben mit dem ich Binär, Oktal, Dezimal und HexaDezimal umwandeln kann wie ich lustig bin.
Warum schreibst Du nicht eine Funktion, die von jeder Basis in jede Basis wandeln kann?

Wenn Du z.B. die Dezimalzahl 1347605150 in ein Zahlensystem der Basis 36 wandeln möchtest, dann würde das auch gehen. (Basis 36 = Ziffer 0..9 und A..Z -> 10 wäre dann also 36, 11 = 37, 0Z = 35, ...)

function X2Y(BaseX, BaseY: Byte; BaseXZahl: string):string; Falls jemand unbedingt eine Funktion Hex nach Bin bräuchte:
Delphi-Quellcode:
function hex2bin(hex:string):string;
begin
  Result := x2y(16, 2, hex);
end;
Das ist doch der einfachste Weg, oder?
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#17

Re: Zahlen umwandeln (Bin, Oct, Dec, Hex)

  Alt 22. Dez 2004, 14:48
Zitat von MaBuSE:
die Dezimalzahl 1347605150 in ein Zahlensystem der Basis 36 wandeln
(Anmerkung: dec = Dezimales Zahlensstem = das mit dem wir rechnen)

In Base36 gibt es die Ziffern:
Code:
0 = 0
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
6 = 6
7 = 7
8 = 8
9 = 9
A = 10
B = 11
C = 12
D = 13
E = 14
F = 15
G = 16
H = 17
I = 18
J = 19
K = 20
L = 21
M = 22
N = 23
O = 24
P = 25
Q = 26
R = 27
S = 28
T = 29
U = 30
V = 31
W = 32
X = 33
Y = 34
Z = 35
Zahlen werden wie folgt zusammengesetzt:
Code:
2X3 in Base36 

2X3
= 2 * 36^2 + 33 * 36^1 + 3 * 36^0 (in dec)
= 3888 + 1188 + 3 (in dec)
= 5079 (in dec)
Hier noch mal die Umrechnungstabelle
Code:
36^0 = 1
36^1 = 36
36^2 = 1296
36^3 = 46656
36^4 = 1679616
36^5 = 60466176
Beispiel: 1347605150 (dec) nach Base36
Code:
MABUSE (base32)
= 22 * 36^5 + 10 * 36^4 + 11 * 36^3 + 30 * 36^2 + 28 * 36^1 + 14 * 36^0 (in dec)
= 1330255872 + 16796160 + 513216 + 38880 + 1008 + 14 (in dec)
= 1347605150 (in dec)
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#18

Re: Zahlen umwandeln (Bin, Oct, Dec, Hex)

  Alt 22. Dez 2004, 14:53
Hallo,

das ist ja ein ganz nettes Programm!!

Nur... - da hat sich wohl der Fehlerteufel ein wenig eingeschlichen (siehe Anhang)

Wenn ich damals in meiner Ausbildung richtig aufgepasst hab dann gibts Binär die Zahl "4" nicht.

mfg
Helmi

[edit]Huch - Attachment vergessen! - Das blöde Alter [/edit]
Miniaturansicht angehängter Grafiken
zahlenwandler_146.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#19

Re: Zahlen umwandeln (Bin, Oct, Dec, Hex)

  Alt 22. Dez 2004, 15:06
Zitat von MaBuSE:
Zitat von Morlon:
ich hab mir grad mühevoll ein kleines Progi geschrieben mit dem ich Binär, Oktal, Dezimal und HexaDezimal umwandeln kann wie ich lustig bin.
Warum schreibst Du nicht eine Funktion, die von jeder Basis in jede Basis wandeln kann?

Wenn Du z.B. die Dezimalzahl 1347605150 in ein Zahlensystem der Basis 36 wandeln möchtest, dann würde das auch gehen. (Basis 36 = Ziffer 0..9 und A..Z -> 10 wäre dann also 36, 11 = 37, 0Z = 35, ...)

function X2Y(BaseX, BaseY: Byte; BaseXZahl: string):string; Falls jemand unbedingt eine Funktion Hex nach Bin bräuchte:
Delphi-Quellcode:
function hex2bin(hex:string):string;
begin
  Result := x2y(16, 2, hex);
end;
Das ist doch der einfachste Weg, oder?
So, ich habe mal eben schnell eine X2Y Funktion geschrieben:

Da ich keine Addition und Multiplikation für base2 bis base36 zur Verfügung habe,
mache ich den Umweg über das Dezimalsystem.
Die Zahlen werden erst von Basis X nach dec umgerechnet und danach von dec zu Basis Y.
Das war auf die schnelle der einfachste Weg (für mich)
Auserdem habe ich mich für IntPower entschieden (x hoch y), da es schneller geht als ein
a := b * b * b * b * ... * b; Kritik willkommen

Delphi-Quellcode:
uses math;

(*
// IntPower ist in der Unit Math von Delphi 7 enthalten
// Copyright (c) 1996, 2001 Borland Software Corporation
function IntPower(const Base: Extended; const Exponent: Integer): Extended;
asm
        mov    ecx, eax
        cdq
        fld1                      { Result := 1 }
        xor    eax, edx
        sub    eax, edx          { eax := Abs(Exponent) }
        jz      @@3
        fld    Base
        jmp    @@2
@@1:    fmul    ST, ST            { X := Base * Base }
@@2:    shr    eax,1
        jnc    @@1
        fmul    ST(1),ST          { Result := Result * X }
        jnz    @@1
        fstp    st                { pop X from FPU stack }
        cmp    ecx, 0
        jge    @@3
        fld1
        fdivrp                    { Result := 1 / Result }
@@3:
        fwait
end;
*)


// 22.12.2004 MaBuSE: X2Y wandelt in der BasisX angegebene Zahl nach BasisY um
// created for [url]www.delphipraxis.net[/url]
function X2Y(BaseX, BaseY: Byte; BaseXZahl: string):string;
const
  Ziffern = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var
  i: Integer;
  Base10Zahl: Int64;
begin
  // Parameter in Ordnung ?
  Assert((BaseX<=36) and (BaseY<=36), 'Basis ist größer 36');
  BaseXZahl := UpperCase(BaseXZahl);
  i := Length(BaseXZahl);
  while (i>0) and (pos(BaseXZahl[i], copy(Ziffern, 1, BaseX))>0) do
  begin
    dec(i);
  end;
  Assert(i=0, 'BaseXZahl enhällt ungültige Ziffern');

  // Umrechnen BaseX nach dec
  Base10zahl := 0;
  for i := 1 to Length(BaseXZahl) do
  begin
    Base10Zahl := Base10zahl +
                  (Round(IntPower(BaseX, length(BaseXZahl)-i)) *
                  (Pos(BaseXZahl[i], Ziffern)-1));
  end;

  // Umrechnen dec nach BaseY
  Result := '';
  i := 0;
  while Base10Zahl >= IntPower(BaseY, i) do
  begin
    inc(i);
  end;
  while i>0 do
  begin
    Result := Result + Ziffern[Base10Zahl div Round(IntPower(BaseY, i-1))+1];
    Base10zahl := Base10Zahl mod Round(IntPower(BaseY, i-1));
    dec(i);
  end;
end;

// zum Test einfach einen Button aufs Formular ;-)
procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.Caption := X2Y(10, 36, '1347605150');
end;
Für die die dann doch einzelne Funktionen wollen:
Delphi-Quellcode:
// bin nach xxx
function bin2hex(bin:string):string;
begin
  Result := x2y(2, 16, bin);
end;

function bin2dec(bin:string):string;
begin
  Result := x2y(2, 10, bin);
end;

function bin2oct(bin:string):string;
begin
  Result := x2y(2, 8, bin);
end;

// oct nach xxx
function oct2hex(oct:string):string;
begin
  Result := x2y(8, 16, oct);
end;

function oct2dec(oct:string):string;
begin
  Result := x2y(8, 10, oct);
end;

function oct2bin(oct:string):string;
begin
  Result := x2y(8, 2, oct);
end;

// dec nach xxx
function dec2hex(dec:string):string;
begin
  Result := x2y(10, 16, dec);
end;

function dec2oct(dec:string):string;
begin
  Result := x2y(10, 8, dec);
end;

function dec2bin(dec:string):string;
begin
  Result := x2y(10, 2, dec);
end;

// hex nach xxx
function hex2dec(hex:string):string;
begin
  Result := x2y(16, 10, hex);
end;

function hex2oct(hex:string):string;
begin
  Result := x2y(16, 8, hex);
end;

function hex2bin(hex:string):string;
begin
  Result := x2y(16, 2, hex);
end;
So ich hoffe es hilft evtl jemanden
Viel Spaß

[edit]
ps: Ich habe mal ein kleines Beispielprogramm erzeugt. (Anhang)
[/edit]
Angehängte Dateien
Dateityp: zip beispbasex2basey_358.zip (206,2 KB, 142x aufgerufen)
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Morlon

Registriert seit: 15. Dez 2004
Ort: Dillingen
38 Beiträge
 
Delphi 7 Professional
 
#20

Re: Zahlen umwandeln (Bin, Oct, Dec, Hex)

  Alt 31. Dez 2004, 01:44
Ich hatte das Progi unter Open-Source hinzugefügt, und da hat doch glatt jemand ein kleines Progi geschrieben (und es ist wirklich klein) dass Dezimal in alles umwandeln kann.

Kuckst du hier
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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:32 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