Archiv verlassen und diese Seite im Standarddesign anzeigen : Bytes zerlegen
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
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)
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, 15:13
so geht es auch:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=10790&highlight=
gruss bluesmash
However, falsch ist
Z=str(y) ' ergibt den string "204"
was du brauchst, ist
Z=bin(y) ' das gibt 0-er und 1-er
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, 15: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
"Bin" funzt wie "str", also string
*Tadel* "Help" lesen ! (Es führt kein and'rer Weg nach Küsnacht)
Aufpassen, Männer ! Je nach methode ist die Zieltabelle von
MSB-> LSB oder
LSB-> MSB
schmic20
30.11.2005, 15: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
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
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
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, 16: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
Na, na :oops:
"language fundamentals" u. "DIM" , ich stöbere öfters in sowas rum.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.