Eleu Geschrieben 7. Oktober 2010 Teilen Geschrieben 7. Oktober 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 7. Oktober 2010 Teilen Geschrieben 7. Oktober 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eleu Geschrieben 7. Oktober 2010 Autor Teilen Geschrieben 7. Oktober 2010 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 :floet: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 7. Oktober 2010 Teilen Geschrieben 7. Oktober 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eleu Geschrieben 7. Oktober 2010 Autor Teilen Geschrieben 7. Oktober 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eleu Geschrieben 8. Oktober 2010 Autor Teilen Geschrieben 8. Oktober 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.