PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ich brauche sowas wie ein bit array



wischos
24.09.2007, 16:45
hi

für eine kleine laufschrift habe ich ein programm in dem ich mehrere längere strings verwende in denen allerdings nur nullen oder einsen stehen also in etwa so

dim bla as string * 100

bla = "10010010001101010 ... usw"

ich würde viel lieber einfach folgendes schreiben dürfen

dimbla as bit * 100

nur leider lässt mich bascom nicht. und wenn ich string verwende verschenke ich doch so viel speicher, das ein string doch 8bit pro zeichen verbraucht wo ich doch eigendlich mit einem bit genug hätte. wie komme ich also zu meinem bit-array??

vielen dank

Bluesmash
24.09.2007, 17:21
auf ein einzelnse bit in einer variabel kannst du folgendermassen zugreifen:

dim bla as byte

bla.0 --> erstes Bit
bla.1 --> zweites Bit
.
.
bla.7 --> achtes Bit

gruss bluesmash

wischos
24.09.2007, 17:38
danke für deine schnelle antwort. nur leider bringt sie mich nicht wirklich weiter. ich weiss, dass wenn ich eine variable als byte deklariere sozusagen ein bit-array der länge 8 habe aber mich interessieren viel größere längen so ~200.
was auch nicht in frage kommt ist ein array aus bytes in dem ich dann jedes byte und seine acht bit einzeln abklapper, denn die langen ketten aus nullen und einsen lasse ich von einem anderen programm generieren und füge sie dann erst in bascom ein.

stefan_Z
24.09.2007, 20:09
wo is das Problem?
Ein Byte ist ja nix anderes als alle Kombinationen aus 0 und 1 in 8 Stellen.
Du kannst sehr wohl anstelle von &B00001010 in einem Array einfach 10 schreiben.
Oder auch Hexadezimal für 16 Bit (dann Variable als Word dimmen): &H0000000000001010

PicNick
24.09.2007, 20:53
Is nicht das schnellste, sowas schreit eigentlich nach assembler


dim byte_array(200) as byte ' reicht für 1600 bit
dim arr_index as word
dim bit_pos as byte
dim counter as word

' alle Bit setzen (zum Beispiel)

for counter = 0 to 1599 ' 200 * 8 -> 1600 Bit , also 0 - 1599

arr_index = counter / 8 '
arr_index = arr_index + 1 ' bascom fängt tabellen mit 1 an
bit_pos = counter AND &H0F '
byte_array(arr_index).bit_pos = 1 ' ein Bit setzen
next

wischos
25.09.2007, 18:09
vielen dank für die antworten ich habe die sache nochmal genauer unter die lupe genommen und werde das ganze in nächster zeit mal in assembler probieren

gruß thomas