Zumindest das hier kann ich dir erklären:
Zitat von
Ghose:
///Binär in Dezimal///
c := c+ Strtoint(s[b]) * power(2 , (-1 + b) ); (Ich habs in Internet gefunden aber versteh es kein bisschen!)
Überlege dir mal, wie eine Binärzahl aufgebaut ist. Sie besteht nur aus Einsen und Nullen, also z.B.
Dabei ist die erste Ziffer die signifikanteste, die Binärzahl wird also "von hinten" gelesen (die hinterste Ziffer hat den kleinsten Wert, die vorderste den größten, siehe "Big Endian")
Aus der Binär-Zahl ergibt sich daher:
Code:
0 * 2^0 = 0
1 * 2^1 = 2
0 * 2^2 = 0
0 * 2^3 = 0
1 * 2^4 = 16
-------------
= 18
Vor deiner Schleife drehst du den Binär-String um, also wird aus 10010 nun 01001. Dann gehst du Zeichen für Zeichen deiner Binär-Zahl von links nach rechts durch, also von der Ziffer mit der niedrigsten Wertigkeit zu der höchsten (da umgedreht). Strtoint(s[b]) liefert dir dabei die jeweilige Ziffer aus der Binär-Zahl, also entweder 0 oder 1. Diese Ziffer wird mit power(2,(b-1)) multipliziert, also mit der Wertigkeit der jeweiligen Ziffer. Für das erste Zeichen (bei uns 0) ergibt sich also 0*2^0 = 0. Dieser Wert wird zu c hinzuaddiert. Das zweite Zeichen (also bei b=2) ist 1, also ergibt sich ein Wert von 1*2^1 = 2, welcher wieder zu c addiert wird. Dies machst du für jedes Zeichen deines Binär-Strings, am Ende erhälst du die gesuchte Dezimal-Zahl c.
Patti
EDIT:
Zu deiner 3. Frage: Wenn du die Eingabe auf bestimmte Zeichen beschränken willst, kannst du beispielsweise im OnKeyPress der Edit-Komponente darauf reagieren:
if not(Key in['0'..'9', 'A'..'F']) then Key := #0; // Bei HEX
Wenn der Benutzer versucht, ein Zeichen einzugeben, das nicht erlaubt ist, erscheint es nicht im Edit