Hallo zusammen!
Ich nutze GLBasic erst seit kurzer Zeit und bin neu hier im Forum.
Ich bastle gerade an einer Funktion, die ein Byte (oder besser deren Wert) in die entsprechenden Bits umwandelt.
Im Prinzip müsste es so funktionieren, aber irgendwie erhalte ich immer nur "0" zurück.
Hier mal der kurze Code:
FUNCTION getBits: number
LOCAL bits$
LOCAL value% = 128
LOCAL i%
FOR i = 1 TO 8
IF number >= value
bits$=bits$+"1"
ELSE
bits$=bits$+"0"
ENDIF
number = number - value
value = value / 2
NEXT
RETURN bits$
ENDFUNCTION
Die Funktion sollte z.B. bei "getBits(97)" -> "01100001" ausgeben.
Würde mich freuen wenn ihr mir weiterhelfen könntet. Vielen Dank schonmal :)
Hallo,
schau Dir das mal an,
http://www.glbasic.com/forum/index.php?topic=2366.0 (http://www.glbasic.com/forum/index.php?topic=2366.0)
Das hat Quentin gepostet.
Hallo D2O,
vielen Dank für die schnelle Antwort! Die Quentins Funktion macht genau was ich suche, auch wenn ich immer noch nicht weiß warum es bei mir nicht geklappt hat.
Danke nochmal.
Hallo TomTiger,
auch ein schöner Ansatz. Deine Funktion läuft nicht, weil sich ein kleiner Denkfehler eingeschlichen hat. Du darfst "value" nur dann von "number" subtrahieren, wenn number auch tatsächlich größer ist ist als value. Ansonsten würdest du gleich im ersten Schleifendurchlauf schon 97 - 128 rechnen. Klar, daß dabei nichts sinnvolles mehr rauskommen kann.
Zweitens:
Die Funktion liefert mit "RETURN bits$" eine Zeichenkette zurück. Also sollte auch die Funktion entsprechend gekennzeichnet sein "FUNCTION getBits$" statt "FUNCTION getBits".
FUNCTION getBits$: number
LOCAL bits$
LOCAL value = 128
LOCAL i
FOR i = 1 TO 8
IF number >= value
bits$=bits$+"1"
number = number - value
ELSE
bits$=bits$+"0"
ENDIF
value = value / 2
NEXT
RETURN bits$
ENDFUNCTION
Hallo Quentin,
vielen Dank für die Hilfe. Manchmal sieht man den Wald vor lauter Bäumen nicht ;)
Da hab ich doch gleich wieder was dazu gelernt.
Deine Funktion klappt übrigens wunderbar, es läuft genau so wie ich mir das vorgestellt habe.
keine Ursache, allerdings gefällt mir deine Lösung besser, weil sie ohne POW() auskommt, nur halt eben mit der Einschränkung auf 1 Byte, aber das reicht ja in den meisten Fällen.