GLBasic forum

Other languages => GLBasic - de => Topic started by: TomTiger on 2010-Dec-29

Title: Bits aus einem Byte auslesen
Post by: TomTiger on 2010-Dec-29
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  :)
Title: Re: Bits aus einem Byte auslesen
Post by: D2O on 2010-Dec-29
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.

Title: Re: Bits aus einem Byte auslesen
Post by: TomTiger on 2010-Dec-29
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.
Title: Re: Bits aus einem Byte auslesen
Post by: Quentin on 2010-Dec-30
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
Title: Re: Bits aus einem Byte auslesen
Post by: TomTiger on 2010-Dec-30
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.
Title: Re: Bits aus einem Byte auslesen
Post by: Quentin on 2010-Dec-30
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.