用for循环读取位,我得到7位而不是8位,这个代码的错误是什么

时间:2015-07-07 14:48:06

标签: vb.net visual-studio-2012

输出: TextBox 2:FalseTrueTrueTrueTrueTrueFrfFalseFalse

TextBox 3:1111100

我的问题是为什么是" TextBox 2"的第一个布尔值?是"错误"和#34; TextBox 3"的第一个整数是1? " TextBox 2"有8个布尔,而#34; TextBox 3"只有7位。显然,在" TextBox 3中,第一位不存在。我哪里做错了..?评论中提供了评论。请在这里说清楚。

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

    Dim array() As Byte = File.ReadAllBytes("D:\binfile.bin")

    Using memory As MemoryStream = New MemoryStream(array)
        Using reader As BinaryReader = New BinaryReader(memory)

            ba1 = New BitArray(array)

            Dim bit_set As Integer

            For i As Integer = 0 To 7

                'to view all 8 bits in boolean format
                TextBox2.Text = TextBox2.Text & ba1.Get(i)

                If ba1.Get(i) = False Then

                    boolean2bits = 0
                    'End If
                ElseIf ba1.Get(i) = True Then

                    boolean2bits = 1
                End If

                'to collect all 8 bits in integer format
                bit_set = bit_set & boolean2bits

                If (i = 7) Then
                    Exit For
                End If

            Next

           'to view collected bits in the text box
            TextBox3.Text = bit_set

        End Using
    End Using


End Sub

2 个答案:

答案 0 :(得分:2)

只是因为您将值01111100赋给整数变量bit_set。但当然,作为整数,前导0并不重要,因此它会被自动删除,并简化为1111100,因为它毕竟是相同的数字。

如果您不想丢失前导零以用于显示目的,那么您可能不希望bit_set属于Integer类型。只需声明为Dim bit_set As String,前导零不会消失。

答案 1 :(得分:1)

看起来你在迈向最终目标Pretty_Girl方面取得了一些进展。

以下是一些需要接受和消化的片段:

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    ba1 = New BitArray(File.ReadAllBytes("D:\binfile.bin"))

    Dim bits As New List(Of String)
    Dim bools As New List(Of String)

    For i As Integer = 0 To 7
        bools.Add(ba1.Get(i).ToString)
        bits.Add(If(ba1.Get(i), "1", "0"))
    Next

    'to view collected bits/bools in the text box
    TextBox2.Text = String.Join(",", bools.ToArray)
    TextBox3.Text = String.Join("", bits.ToArray)
End Sub

替代版本2:

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    ba1 = New BitArray(File.ReadAllBytes("D:\binfile.bin"))

    TextBox2.Clear()
    TextBox3.Clear()
    For i As Integer = 0 To 7
        TextBox2.AppendText(ba1.Get(i).ToString & ",")
        TextBox3.AppendText(If(ba1.Get(i), "1", "0"))
    Next
End Sub

替代版本3:

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    ba1 = New BitArray(File.ReadAllBytes("D:\binfile.bin"))

    Dim bits As New System.Text.StringBuilder
    Dim bools As New System.Text.StringBuilder

    For i As Integer = 0 To 7
        bools.Append(ba1.Get(i).ToString & ",")
        bits.Append(If(ba1.Get(i), "1", "0"))
    Next

    TextBox2.Text = bools.ToString
    TextBox3.Text = bits.ToString
End Sub