Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo,

ich möchte gerne mehrere boolesche Variable zu einem Integer Wert in VB 6 verketten.

Das möchte ich deshalb, weil ich 8 Bit im Programm unterschiedlich ansteuern möchte (True oder False)

Über das winsock Steuerelement übertrage ich dann via TCP/IP alle 8 Bit zyklich auf einmal.

Hier mein Beispielcode:

Es werden in dem Beispiel nur 2 Bit über 4 Schaltflächen unterschiedlich gesetzt oder rückgesetzt.

Das Ergebnis aller 8 Bits wird zyklisch über Timer1 in Text1 angezeigt (Siehe Dateianhang)

In Text2 möchte ich gerne, dass alle 8 Bits aus der Variablen "Wert" als Integerwert angezeigt werden

Ich bekomme jedoch an der Stelle // Zahl = CInt(Wert) // gemeldet, dass die Datentypen unverträglich sind.

WahrFalschWahrFasch..... kann ich so nicht über das winsock Steuerelement versenden.

Ich benötige einen Integerwert.

Kann mir jemand sagen, wie ich das hinbekomme ?


Dim A As Boolean

Dim B As Boolean

Dim C As Boolean

Dim D As Boolean

Dim E As Boolean

Dim F As Boolean

Dim G As Boolean

Dim H As Boolean


Dim Zahl As Integer


Dim Wert As String


-------------------------------------------------------------------

Private Sub Command1_Click()

E = True

End Sub

------------------------------------------------------------------

Private Sub Command2_Click()

E = False

End Sub

-------------------------------------------------------------------

Private Sub Command3_Click()

C = True

End Sub

------------------------------------------------------------------

Private Sub Command4_Click()

C = False

End Sub

-------------------------------------------------------------------

Private Sub Timer1_Timer()

Wert = A & B & C & D & E & F & G & H

Text1.Text = Wert

Zahl = CInt(Wert)

Text2.Text = Zahl

End Sub

-----------------------------------------------------------------------


Gruß

Eleu

post-58959-14430448816277_thumb.jpg

Geschrieben
Mit einer Stringvariablen bist du da völlig auf dem Holzweg.

Du musst die einzelnen Bits mit ihren Stellenwert im Integer multiplizieren, und dann Oder-verknüpfen.

Verstehe ich nicht ?

Zu Beginn (Anwendung wird gestartet) hätte die Variable die ich übertragen will den Wert 0.

0 multipliziert mit irgendwas ergibt immer 0 ?

Oder wie ist es gemeint ?

Hättest Du einen Beispielcode für mich :rolleyes::floet:

Geschrieben

Stellenwertsystem ? Wikipedia

Du musst jedem Boolean eine Dual-Stelle in deinem Integer zuordnen, d.h. ein Bit entspricht der Einer-Stelle, eins der Zweier-Stelle, eins der Vierer-Stelle usw.

Angenommen, der 4er, 8er und 64er-Boolean sind gesetzt (True):

0 x 1

0 x 2

1 x 4

1 x 8

0 x 16

0 x 32

1 x 64

0 x 128

-------

76 <- Das ist dein Wert

Geschrieben

Hallo Klotzkopp,

vielen Dank, die Info hat`s gebracht.

Mein Code sieht jetzt folgendermaßen aus:

(Mit der Funktion "Dec2Bin" kann man sich das Ergebnis bitweise in Text1 anzeigen lassen)


Dim A As Integer

Dim B As Integer

Dim C As Integer

Dim D As Integer

Dim E As Integer

Dim F As Integer

Dim G As Integer

Dim H As Integer

Dim A1 As Integer

Dim B2 As Integer

Dim C3 As Integer

Dim D4 As Integer

Dim E5 As Integer

Dim F6 As Integer

Dim G7 As Integer

Dim H8 As Integer


Dim Zahl As Integer


Dim Wert As Integer

--------------------------


Private Sub Command1_Click()

E = 1

End Sub

-----------------

Private Sub Command2_Click()

E = 0

End Sub

----------------------------

Private Sub Command3_Click()

C = 1

End Sub

----------------------------

Private Sub Command4_Click()

C = 0

End Sub

----------------------------

Private Sub Timer1_Timer()


A1 = A * 1

B2 = B * 2

C3 = C * 4

D4 = D * 8

E5 = E * 16

F6 = F * 32

G7 = G * 64

H8 = H * 128


Wert = A1 + B2 + C3 + D4 + E5 + F6 + G7 + H8


Text2.Text = Wert


Text1.Text = Dec2Bin(Val(Wert), 8)

End Sub

--------------------------------------------------------

Private Function Dec2Bin(ByVal DEC As Long, ByVal NumDigitsMin As Long) As String

Dim i As Long


Do

If (DEC And 2 ^ i) > 0 Then

Dec2Bin = "1" & Dec2Bin

DEC = DEC - 2 ^ i

Else

Dec2Bin = "0" & Dec2Bin


End If

i = i + 1

Loop Until DEC = 0

Dec2Bin = Format$(Dec2Bin, String(NumDigitsMin, "0"))


Dec2BinExit:

Exit Function


Dec2BinErrror:

With Err

    .Raise .Number, .Source, .Description, .HelpFile, .HelpContext

End With

Resume Dec2BinExit


End Function


Gruß

Eleu

post-58959-14430448816743_thumb.jpg

Geschrieben

Hallo,

ich musste für das Beispiel 16 Variable vom Typ Integer anlegen

Wäre es möglich, diese Funktion mit nur einer oder zwei Feldvariablen zu lösen ?

Beispiel:

Deklaration:

Dim Feld(8) as Integer

Ansprechen eines einzelnen Integer Wertes:

Feld(4) = 1

oder

Feld(4) = 0

Über eine Schleife das/die Felder vorbelegen:

Dim i as Integer

For i = 1 to 8

Wert = Hier die Berechnung aus Timer 1

Next i

Wie muss die Berechnung in der Schleife aussehen ?

Ich bekomme es nicht hin.

Kann mir jemand helfen ?

Gruß

Eleu

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...