Bits aus einem Byte auslesen

Previous topic - Next topic

TomTiger

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:

Code (glbasic) Select

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  :)

D2O

I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

TomTiger

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.

Quentin

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".

Code (glbasic) Select

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

TomTiger

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.

Quentin

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.