附加字节放置空格

时间:2011-10-03 00:51:24

标签: .net vb.net string

我正在尝试循环遍历字节数组并将内容复制到新的字节列表中,然后将其显示回来。请参阅下面的代码。

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”(即字母之间有空格) 请注意:我必须在循环中复制(块)并在结尾处获得结果,这只是重现我真实问题的一个示例。

任何帮助将不胜感激

2 个答案:

答案 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