Vb.net 用for循环读取位时,我得到的是7位而不是8位,什么';这个密码怎么了
输出: 文本框2:FalseTureFalse 文本框3:1111100 我的问题是为什么“TextBox 2”的第一个布尔值是“False”,而“TextBox 3”的第一个整数是1?“文本框2”有8个布尔值,而“文本框3”只有7位。显然,在“文本框3”中,第一位不存在。我哪里做错了…?代码中提供了注释。请在此说明Vb.net 用for循环读取位时,我得到的是7位而不是8位,什么';这个密码怎么了,vb.net,visual-studio-2012,Vb.net,Visual Studio 2012,输出: 文本框2:FalseTureFalse 文本框3:1111100 我的问题是为什么“TextBox 2”的第一个布尔值是“False”,而“TextBox 3”的第一个整数是1?“文本框2”有8个布尔值,而“文本框3”只有7位。显然,在“文本框3”中,第一位不存在。我哪里做错了…?代码中提供了注释。请在此说明 Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim
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
这仅仅是因为您将值
011111100
分配给整数变量bit\u set
。但当然,作为一个整数,前导0
并不重要,因此它会自动剥离,并简化为简单的11111 00
,因为它毕竟是同一个数字
如果您不希望出于显示目的而丢失前导零,那么您可能不希望
bit\u set
为Integer
类型。只需将at声明为Dim bit\u set为String
,前导零将不会消失。看起来您正在朝着最终目标取得一些进展
以下是一些需要理解和消化的片段:
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
你的类型选择太草率了,bit_set必须是字符串。在源代码文件顶部使用Option Strict On编程一段时间,让编译器帮助你正确选择。你好,我很高兴你被解锁。我注意到你接受了这个答案,然后不被接受?这是故意的吗?这是你的选择:)不,我不知道发生了什么,我不知道ght无意中再次点击了它:D.您的答案被完全接受了..非常完美..:)再次感谢。@Beatty_Girl:啊,别担心。也许您尝试了接受多个答案,但不幸的是,这无法在StackOverflow中完成。