我正在尝试循环遍历字节数组并将内容复制到新的字节列表中,然后将其显示回来。请参阅下面的代码。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim myByte() As Byte = New Byte() {65, 66, 67}
Dim newByte() As Byte = New Byte() {}
Dim tempByteList As New List(Of Byte)
For i As Integer = 0 To 2
ReDim newByte(1)
Array.Copy(myByte, i, newByte, 0, 1)
tempByteList.AddRange(newByte)
Next
Dim str1 As String = System.Text.UnicodeEncoding.UTF8.GetString(tempByteList.ToArray())
End Sub
我希望看到str1为“ABC”,但我得到的输出是“A B C”(即字母之间有空格) 请注意:我必须在循环中复制(块)并在结尾处获得结果,这只是重现我真实问题的一个示例。
任何帮助将不胜感激
答案 0 :(得分:1)
问题出在您的ReDim
声明中。 Microsoft's definition of ReDim声明指定的数组边界始终从0到指定的边界(在您的情况下为1),因此您实际上是ReDim
- 一个2项数组,这就是您看到的原因空间“在A,B和C元素之间。将您的ReDim
声明更改为
ReDim newByte(0)
并且一切都应该很好,因为您将声明newByte数组从0变为0(单个项目数组),这就是您想要的。
答案 1 :(得分:0)
您也可以在VB.Net中使用Array.CreateInstance方法,而不需要执行redim,因为createInstance使其完全符合您指定的大小。 (只有其他的事情是你需要构建你的TempByteList,或者你知道在循环的开始你需要的大小,因为你可以最初创建你的最终bytearray和Array.Copy他们到正确的偏移量而不是附加到然后列出.ToArray()
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim myByte() As Byte = New Byte() {65, 66, 67}
Dim newByte() As Byte = CType(Array.CreateInstance(GetType(Byte), 1), Byte())
Dim tempByteList As New List(Of Byte)
For i As Integer = 0 To 2
Array.Copy(myByte, i, newByte, 0, 1)
tempByteList.AddRange(newByte)
Next
Dim str1 As String = System.Text.UnicodeEncoding.UTF8.GetString(tempByteList.ToArray())
End Sub