Добавление байтов ставит пробелы - PullRequest
0 голосов
/ 03 октября 2011

Я пытаюсь перебрать массив байтов, скопировать содержимое в новый список байтов и отобразить их обратно.пожалуйста, смотрите код ниже.

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", но результат, который я получаю, это "ABC" (то есть с пробелами между буквами). Обратите внимание: я должен копировать) в цикле и получите результат в конце, это всего лишь образец для воспроизведения моей настоящей проблемы.

любая помощь будет оценена

Ответы [ 2 ]

1 голос
/ 03 октября 2011

Проблема в вашем ReDim утверждении. Определение Microsoft ReDim гласит, что указанные границы массива всегда переходят от 0 до указанной границы (в вашем случае 1), поэтому вы, по сути, ReDim определяете массив из 2 элементов, поэтому вы ' Вы видите «пробелы» между элементами A, B и C. Измените ваше заявление ReDim на

ReDim newByte(0)

и все должно быть хорошо, так как вы будете тогда объявлять массив newByte, чтобы перейти от 0 до 0 (массив одного элемента), что вам и нужно.

0 голосов
/ 03 октября 2011

Вы также можете использовать метод Array.CreateInstance в VB.Net, и вам не нужно делать redim, так как createInstance делает его точно указанным вами размером. (Единственное, что вам нужно, это то, что вам нужно построить свой TempByteList или вы знаете в начале цикла нужный вам размер, потому что вы можете просто создать свой Final 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...