PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bytes zerlegen



Murus
30.11.2005, 13:28
Hallo zusammen,

ich möchte ein Byte als Abfolge von Nullen und Einsen unter einer Variable speichern. Danach möchte ich die einzelnen Nullen und Einsen in einer For-Schlaufe auslesen und in ein Array ablegen.
Ich hab versucht, die Variable in einen String zu zerlegen und dann die einzelnen Stellen mit "mid" auslesen, klappt aber net

Hat jemand einen Tipp parat, wie man das lösen könnte?

Herzliche Grüsse
Mario

PicNick
30.11.2005, 13:55
Muss aber gehen. Zeig mal' her.

Ist das eine Fingerübung oder was ist der Zweck ? (ich frag' nur, weil's mr umständlich vorkommt)

Murus
30.11.2005, 14:11
Also:
y=&B11001100

Z=str(y)
For i=1 to 8 Step 1
m = mid(z,i,1)
b=Val(m)
X(i)=b
Next

So siehts aus und so gehts nicht.

Bluesmash
30.11.2005, 14:13
so geht es auch:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=10790&highlight=

gruss bluesmash

PicNick
30.11.2005, 14:27
However, falsch ist
Z=str(y) ' ergibt den string "204"
was du brauchst, ist
Z=bin(y) ' das gibt 0-er und 1-er

Murus
30.11.2005, 14:34
Ah, ok! Und das bin, ist das schon ein String, oder muss noch einer draus gemacht werden?

Herzliche Grüsse und danke
Mario

schmic20
30.11.2005, 14:39
Hallo Murus,

so geht es:



Y = &B11001100
M = &B00000001

For I = 1 To 8 Step 1
B = Y And M 'Inhalt von Y wird mit aktuellem Inhalt von M "UND"-verknüpft
If B > 0 Then 'Wenn Ergebnis in B größer als 0 ist, dann soll B = 1 sein
B = 1 'Wenn B=0 ist kann es so bleiben
End If
X(i) = B 'Der jeweiligen Array-position wird der Inhalt von B (0 oder 1) zugewiesen
Shift M , Left , 1 'Das Abfragebit in M wird um eine Stelle nach links verschoben
Next


Viele Grüße
Michael

PicNick
30.11.2005, 14:40
"Bin" funzt wie "str", also string

*Tadel* "Help" lesen ! (Es führt kein and'rer Weg nach Küsnacht)

PicNick
30.11.2005, 14:44
Aufpassen, Männer ! Je nach methode ist die Zieltabelle von
MSB-> LSB oder
LSB-> MSB

schmic20
30.11.2005, 14:47
Hallo PicNick,

dann halt anders herum:



Y = &B11001100
M = &B10000000

For I = 1 To 8 Step 1
B = Y And M 'Inhalt von Y wird mit aktuellem Inhalt von M "UND"-verknüpft
If B > 0 Then 'Wenn Ergebnis in B größer als 0 ist, dann soll B = 1 sein
B = 1 'Wenn B=0 ist kann es so bleiben
End If
X(i) = B 'Der jeweiligen Array-position wird der Inhalt von B (0 oder 1) zugewiesen
Shift M , Right , 1 'Das Abfragebit in M wird um eine Stelle nach rechts verschoben
Next


Viele Grüße
Michael

PicNick
30.11.2005, 15:05
Gut, heut' lassen wir's krachen: Einer geht noch


Dim X(8) As Byte
Dim Z As String * 8 At X Overlay

Y = &B11001100
Z = Bin(y)

For I = 1 To 8 Step 1
X(i) = X(i) And 1
Next

Murus
30.11.2005, 15:09
Ja dann kann ichs ja mit dem Bin machen!

Y=&B11001100
M=bin(y)

For i=1 to 8
O=mid (m, i, 1)
U=Val(o)
X(I)=U
Next

So gehts dann ja auch... der Compiler frisst das, testen muss ich noch.

Herzliche Grüsse und Danke
Mario

oe9vfj
30.11.2005, 15:21
Eine andere Variante:

Im Code ist ein Beispiel mit LSB First und eiens mit MSB first.


Dim b1 as Byte

dim b2(8) as Byte
Dim i as Byte, j as Byte

b1 = &H55 ' Test Wert

' LSB zuerst in das Array

For i = 0 to 7
j = i + 1
b2(j) = b1.i
next



Print b2(1); " " ; b2(2) ; " " ; b2(3) ; " " ; b2(4); " " ; b2(5); " " ; b2(8); " " ; b2(7); " " ; b2(8)



' MSB zuerst in das Array

For i = 0 to 7
j = 8 - i
b2(j) = b1.i
next

Print b2(1); " " ; b2(2) ; " " ; b2(3) ; " " ; b2(4); " " ; b2(5); " " ; b2(8); " " ; b2(7); " " ; b2(8)

Bei dem Code ist zu beachten, dass die Bit-Zählung mit 0 beginnt und die Zeichenzählung im Array mit 1.

schmic20
30.11.2005, 15:21
@PicNick

Hallo Robert,

die Lösung ist super. *Meinen Hut zieh und in den Staub versinke*

Diese Definition


Dim Z As String * 8 At X Overlay

kannte ich noch nicht. Mein Bascom schmeißt darüber in der Hilfe nichts raus.
Woher hast du das?

Viele Grüße
Michael

PicNick
30.11.2005, 15:28
Na, na :oops:

"language fundamentals" u. "DIM" , ich stöbere öfters in sowas rum.