Entwickler-Ecke

Sonstiges (Delphi) - Strings in Dezimal umwandeln


sebastianf - Fr 08.11.02 12:01
Titel: Strings in Dezimal umwandeln
HAllo !

ich habe folgendes Problem, das mir die Suchefunktion des Forum und der EDH2000 nicht lösen konnten :?

Ich habe einen String (8 Stellen), der Binärdaten enthält.
[z.B. 01001101 oder so]

.. diesen möchte ich nun in den richtigen Dezimal , Binär u.o. Hexadezimal Wert umrechnen.
Ich würde mich freuen, wenn mir jemand ein wenig auf die Sprünge helfen könnte.

Viele Grüße,
Sebastian


LCS - Fr 08.11.02 12:22

Hi
Wenn du Delphi 6 verwendest, steht dir BinToHex zur Verfügung um aus dem Binärstring einen Hexstring zu erzeugen. Aus dem HexString kannst du mit StrToInt('$' + HexString) den Integer erzeugen.

Wenn du ne andere Delphi Version hast, sollte das ein brauchbarer und ausbaufähiger Ansatz sein:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function BinToInt(Text: string): integer;
var
   i  : Integer;
   wert: cardinal;
begin
   i := Length(Text);
   wert := 1;
   Result := 0;
   if  i <= 16 then
     while i > 0 do begin
       if  Text[i] = '1' then
           Result := Result + wert;
           Dec(i);
           wert := wert shl 1;
       end
   else
       Result := -1;
end;


Gruss Lothar


SteaLth - Fr 08.11.02 12:31

den String mittels StrToBCD in eine Binärzahl umwandeln und diese dann mittels BCDToInteger in dezimal umwandeln.

Schau einfachmal in der OH nach StrTo..., HexTo..., IntTo... und BCDTo... usw.


sebastianf - Fr 08.11.02 13:24

Danke für eure Hilfe,
doch leider scheint Delphi 5 (nutze ich hier)
die Funktion StrToBDC nicht zu kennen - auch die OH gab dazu keine Info...

Ich probiers nochmal weiter, trotzdem
THANX :-)


bis11 - Fr 08.11.02 17:15

Du kannst es auch noch etwas umständlicher machen, ein Binärcode sieht ja zum Beispiel so aus :

00110101

Für jede stelle steht ja 0 2 4 8 16 32 64 128. So jetzt liest Du jede Stelle einzeln ein und dann merkst Du Dir die Stellen wo eine 1 stand und addierst dann die Zahlen zusammen. Damit hast Du auch eine Dezimalzahl aus dem Binärstring gewonnen.


SteaLth - Fr 08.11.02 17:42

Andersrum wird n Schuh draus :) 128 64 32 16 8 4 2 1 also diese Zahlen aufsummieren wenn an der enstprechenden Stelle im Binärstring eine '1' steht. 00110101 ergibt also 32+16+4+1=53


bis11 - Fr 08.11.02 19:14

Oh sorry, habe ich in die verkehrte Richtung gedacht, Du hast natürlich recht SteaLth. :oops:


Anonymous - Fr 08.11.02 20:18

Hier eine Funktion die ich mal vor Jahren geschrieben habe. Bis jetzt hatte ich damit keine Probleme.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
uses ..., Math;

function BinToDec(Bin: String): Word;
var  r: Single; i: Byte;
begin
  r := 0;
  for i := 1 to Length(Bin) do case Bin[i] of '1': r := r + Power(2, (Length(Bin) - i)) end;
  Result := Trunc( r );
end; {Popov}


Beispiel:


Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage( IntToStr(BinToDec('0101010101010101')) );
end;


Die Länge des Binärstrings ist dabei egal und muß eventuell vorher gekürzt werden, d.h. wenn ich nur 6 Bit's interesieren, dann muß die Länge des Binärstrings 6 Zeichen lang sein.