Dezimal in Binär Zahl und dann als Checkboxen

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Dezimal in Binär Zahl und dann als Checkboxen

    Hallo, habe eine Netzwerkkommunikation mit einer Eigenentwicklung Hergestellt. die eigenentwiklung schickt mir z.b. den wert 121 was in Binär etwa so aussehen sollte:

    Dezimal: 121
    Binär: 100111100000000

    Das ganze wollte ich so berechen:

    VB.NET-Quellcode

    1. Dim a As Integer = Val(TextBox3.Text) Mod 2
    2. Dim z2 As Integer = Val(TextBox3.Text) / 2
    3. If a = 1 Then
    4. CheckBox1.Checked = True
    5. Else
    6. CheckBox1.Checked = False
    7. End If
    8. Dim b As Integer = z2 Mod 2
    9. Dim z3 As Integer = z2 / 2
    10. If b = 1 Then
    11. CheckBox2.Checked = True
    12. Else
    13. CheckBox2.Checked = False
    14. End If
    15. Dim c As Integer = z3 Mod 2
    16. Dim z4 As Integer = z3 / 2
    17. If c = 1 Then
    18. CheckBox3.Checked = True
    19. Else
    20. CheckBox3.Checked = False
    21. End If
    22. Dim d As Integer = z4 Mod 2
    23. Dim z5 As Integer = z4 / 2
    24. If d = 1 Then
    25. CheckBox4.Checked = True
    26. Else
    27. CheckBox4.Checked = False
    28. End If
    29. Dim z As Integer = z5 Mod 2
    30. Dim z6 As Integer = z5 / 2
    31. If z = 1 Then
    32. CheckBox5.Checked = True
    33. Else
    34. CheckBox5.Checked = False
    35. End If
    36. Dim f As Integer = z6 Mod 2
    37. Dim z7 As Integer = z6 / 2
    38. If f = 1 Then
    39. CheckBox6.Checked = True
    40. Else
    41. CheckBox6.Checked = False
    42. End If
    43. Dim g As Integer = z7 Mod 2
    44. Dim z8 As Integer = z7 / 2
    45. If g = 1 Then
    46. CheckBox7.Checked = True
    47. Else
    48. CheckBox7.Checked = False
    49. End If
    50. Dim h As Integer = z8 Mod 2
    51. Dim z9 As Integer = z8 / 2
    52. If h = 1 Then
    53. CheckBox8.Checked = True
    54. Else
    55. CheckBox8.Checked = False
    56. End If
    57. 'vvvv
    58. Dim i As Integer = z9 Mod 2
    59. Dim z10 As Integer = z9 / 2
    60. If i = 1 Then
    61. CheckBox9.Checked = True
    62. Else
    63. CheckBox9.Checked = False
    64. End If
    65. Dim j As Integer = z10 Mod 2
    66. Dim z11 As Integer = z10 / 2
    67. If j = 1 Then
    68. CheckBox10.Checked = True
    69. Else
    70. CheckBox10.Checked = False
    71. End If
    72. Dim k As Integer = z11 Mod 2
    73. Dim z12 As Integer = z11 / 2
    74. If k = 1 Then
    75. CheckBox11.Checked = True
    76. Else
    77. CheckBox11.Checked = False
    78. End If
    79. Dim l As Integer = z12 Mod 2
    80. Dim z13 As Integer = z12 / 2
    81. If l = 1 Then
    82. CheckBox12.Checked = True
    83. Else
    84. CheckBox12.Checked = False
    85. End If
    86. Dim m As Integer = z13 Mod 2
    87. Dim z14 As Integer = z13 / 2
    88. If m = 1 Then
    89. CheckBox13.Checked = True
    90. Else
    91. CheckBox13.Checked = False
    92. End If
    93. Dim n As Integer = z14 Mod 2
    94. Dim z15 As Integer = z14 / 2
    95. If n = 1 Then
    96. CheckBox14.Checked = True
    97. Else
    98. CheckBox14.Checked = False
    99. End If
    100. Dim o As Integer = z15 Mod 2
    101. Dim z16 As Integer = z15 / 2
    102. If o = 1 Then
    103. CheckBox15.Checked = True
    104. Else
    105. CheckBox15.Checked = False
    106. End If
    107. Dim p As Integer = z16 Mod 2
    108. Dim z17 As Integer = z16 / 2
    109. If p = 1 Then
    110. CheckBox16.Checked = True
    111. Else
    112. CheckBox16.Checked = False
    113. End If


    so jetz scheint das ganze aber zu runden was natürlich die ganze rechnung durcheinader bringt. Gibt es da eine einfach lösung das genrell nach abgerundet wirt?
    fürs abrunden würde ich dir Math.Floor() empfehlen
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    So geht's in zwei Zeilen:

    VB.NET-Quellcode

    1. Dim i As Integer = 170
    2. Dim s As String = Convert.ToString(i, 2).PadLeft(32, "0"c) '32 bits

    Quelle: social.msdn.microsoft.com/Foru…to-binary?forum=vbgeneral
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Dann so oder?

    VB.NET-Quellcode

    1. Dim x As String = bin
    2. For i = 1 To x.Length
    3. Dim a As New String(Mid(x, i, 1))
    4. If a = "1" Then
    5. CheckBox16.Checked = True
    6. Else
    7. CheckBox16.Checked = False
    8. End If
    9. Next
    10. For i = 2 To x.Length
    11. Dim a As New String(Mid(x, i, 1))
    12. If a = "1" Then
    13. CheckBox15.Checked = True
    14. Else
    15. CheckBox15.Checked = False
    16. End If
    17. Next
    18. For i = 3 To x.Length
    19. Dim a As New String(Mid(x, i, 1))
    20. If a = "1" Then
    21. CheckBox14.Checked = True
    22. Else
    23. CheckBox14.Checked = False
    24. End If

    (ist nur ein kleiner auschnitt geht über 16 text boxen weriter)


    so fuktieoniert es nicht. dann werden einfach alle cheboxen aktiv...
    Is zwar C#, aber kann man mit IIf() lösen:

    C#-Quellcode

    1. double d = 4.3;
    2. double e = (d - (int)d) < 0.5 ? (int)d : (int)d + 1;


    Im Prinzip schau ich nach, ob der dezimalrest größer als 0,5 is, wenn ja dann isses <4,5 => aufrunden, sonst abrunden

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    also irgend wie verstehe ich es nicht. wenn ich jetzt dein beispiel nähme:

    VB.NET-Quellcode

    1. [ Dim x As String = "123456789"
    2. For i = 1 To x.Length
    3. MessageBox.Show(Mid(x, i, 1))
    4. Next
    5. /vbnet]
    6. und stadestten das draus mache:
    7. [vbnet] Dim x As String = "123456789"
    8. For i = 3 To x.Length
    9. MessageBox.Show(Mid(x, i, 1))
    10. Next


    erhalte ich den wert 3.

    müste dem nach doch stimmen oder? :/

    VB.NET-Quellcode

    1. Dim x As String = "123456789"
    2. For i = 1 To x.Length 'Anfang
    3. MessageBox.Show(Mid(x, i, 3)) 'wie viele Positionen
    4. Next

    und das hier list die ersten 3 stellen aus. Korekt oder?
    @Mokki Mid ist aus VB6 und daher Unsinn. Der objektorientierte .NET-Weg wäre String.SubString.
    @Radinator Selbes gilt für IIf. Das geht in VB.NET auch mit dem normalen If.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Einfach den Microsoft.VisualBasic-Namespace aus Visual Studio entfernen oder (noch besser) C# verwenden. ;)
    Böses aus VB6/VB2003 - und die richtigen VB.NET-Alternativen

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ich weiß ja nicht, wie Du den Binärwert darstellen willst. Wenn als String, dann geht das einfach mit Convert.ToString(121, 2).
    Das kannste dann ja parsen, wie Du willst.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    der decimal wert, wirt du 16bit Binär, und das soll zu checkboxen werden:

    sollte jetzt so gehen oder:

    VB.NET-Quellcode

    1. Dim decimal1 As Integer = Val(TextBox3.Text)
    2. Dim bin As String = Convert.ToString(decimal1, 2).PadLeft("16", "0"c)
    3. TextBox25.Text = bin.ToString
    4. Dim a As String = bin.Substring(0, 1)
    5. If a = "1" Then
    6. CheckBox16.Checked = True
    7. Else
    8. CheckBox16.Checked = False
    9. End If
    10. Dim a As String = bin.Substring(1, 1)
    11. If a = "1" Then
    12. CheckBox15.Checked = True
    13. Else
    14. CheckBox15.Checked = False
    15. End If
    Ne, das sind 8 Bits, nicht 16. Oder meinst Du jetzt nicht speziell die 121?
    Und so ist das doch viel zu komplex. Ich würde einfach das so parsen, dann jede Zahl auch anschauen und einfach die Werte setzen. Die Abfragen sind redundant.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: