Entwickler-Ecke

Sonstiges (Delphi) - Binär -> Dezimal? gibt's das schon


Spike - Do 27.06.02 21:59
Titel: Binär -> Dezimal? gibt's das schon
Hallo,
ich bin auf der Suche nach einer Funktion zum Umwandeln von Binärdaten ins dezimale Format. Ich könnt's wohl selber schreiben aber ich wollt nur mal wissen ob ich vielleicht nicht gucken kann und es sowas schon gibt. Man muß ja nicht das Rad neu erfinden.
Ich hab nur BinToHex gefunden.


Arakis - Do 27.06.02 22:12

Nimm einfach BinToHex und schleuß dass ganze dann durch dies Funktion hextoint: (Bitte nicht totschlagen, diese Funktion lässt sich garantiert effizienter realisieren :oops: )


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
function getnum(h1: String): Integer; 
var 
d1: Integer; 
begin 
  h1:=lowercase(h1); 
  if h1 = '0' Then d1 := 0; 
  if h1 = '1' Then d1 := 1; 
  if h1 = '2' Then d1 := 2; 
  if h1 = '3' Then d1 := 3; 
  if h1 = '4' Then d1 := 4; 
  if h1 = '5' Then d1 := 5; 
  if h1 = '6' Then d1 := 6; 
  if h1 = '7' Then d1 := 7; 
  if h1 = '8' Then d1 := 8; 
  if h1 = '9' Then d1 := 9; 
  if h1 = 'a' Then d1 := 10; 
  if h1 = 'b' Then d1 := 11; 
  if h1 = 'c' Then d1 := 12; 
  if h1 = 'd' Then d1 := 13; 
  if h1 = 'e' Then d1 := 14; 
  if h1 = 'f' Then d1 := 15; 
  result:=d1; 
end; 
 
function hextoint(hex: String): Integer; 
var 
  d: Integer; 
  i: Integer; 
  dez: Integer; 
  h: String; 
  dd: Integer; 
begin 
  i:=1; 
  dez:=0; 
  while i < length(hex)+1 do 
  begin 
    h:=copy(hex, i, 1); 
    d:=getnum(h); 
    dd:=d*round(power(16, length(hex)-i)); 
    dez:=dez+dd; 
    inc(i); 
  end; 
  result:=dez; 
end; 
 
 
procedure TForm1.Button1Click(Sender: TObject); 
 
begin 
  showmessage(inttostr(hextoint('40f'))); 
end;


Bis dann
user defined image


Spike - Do 27.06.02 22:31

Danke für den Vorschlag. Ich habs nun doch mal direkt gemacht:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function bin2int(bin : string) : integer;
  var a,z : integer;
begin
  result := 0;
  a := 1;
  for z := length(bin) downto 1 do  begin
    if bin[z]='1' then inc(result,a);
    a := a * 2;
  end;
end;


Arakis - Do 27.06.02 22:33

Wie heißt es denn noch mal? "Alle Wege führen nach Rom". Die einen halt über Umwege :roll:

Bis dann
user defined image


Pit - Fr 28.06.02 01:21
Titel: Re: Binär -> Dezimal? gibt's das schon


Spike - Fr 28.06.02 11:09

also ich denke da liegt eine Verwechslung vor. Eine Dual bzw. Binärzahl ist laut Definition:
Zitat:
eine aus einer oder mehreren Binärziffern (0 oder 1) bestehende Zahl. Jedes weitere Bit verdoppelt die Anzahl der möglichen numerischen Kombinationen.

und die gewünschte Dezimalzahl ist eine Zahl auf der Basis von 10 - also schon eine Integer bzw. Realzahl. Und genau diese Umwandlung nimmt meine Prozedure vor. Wie man die Binärzahl darstellt, ob als String oder Array das ist natürlich Geschmacksache.
Allerdings hast du recht, negative Vorzeichen müssten noch berücksichtigt werden.


Pit - Fr 28.06.02 12:38



Spike - Fr 28.06.02 12:56

also 1. du hast recht - man muß natürlich andersrum zählen -ich habs oben mal verbessert - nun ist 0011 auch 3

aber ansonsten muß ich widersprechen denn natürlich kann man bei einem PC alles bis zur binären Darstellung zurückverfolgen. Aber das war nicht Ziel der Funktion sondern ich wollte einen String der eine binäre Zeichenfolge (also Nullen und Einsen) darstellt in eine dezimale Zahl umwandel. Nicht mehr und nicht weniger.
Und das der PC diese Zahl intern wieder binär speichert usw. spielt ja wohl dabei überhaupt keine Rolle.


Pit - Fr 28.06.02 13:19



Spike - Fr 28.06.02 13:27
Titel: Re: Binär -> Dezimal? gibt's das schon
Pit hat folgendes geschrieben:
Spike hat folgendes geschrieben:
ich bin auf der Suche nach einer Funktion zum Umwandeln von Binärdaten ins dezimale Format.

Das wäre IntToStr.


soviel zum Thema Grundlagenwissen. Ich für mich schließe das Thema damit ab, da Du es jetzt persönlich nimmst.


Pit - Fr 28.06.02 14:19
Titel: Re: Binär -> Dezimal? gibt's das schon