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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!