Zum Inhalt springen

Typen unverträglich


Eleu

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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:

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...