2011-10-03 4 views
0

바이트의 배열을 반복하여 내용을 새로운 바이트 목록에 복사하고 다시 표시하려고합니다. 아래의 코드를 참조하십시오.바이트를 추가하면 공백이 발생합니다.

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 

나는 "ABC"하지만 난 얻을 넣어 아웃 "ABC"있는 그대로 str1이보고 싶어 (즉, 글자 사이에 공백) 주의 사항 : 나는 루프 내에서 (덩어리)를 복사 얻을 수있는 결과는 결국 실제 문제를 재현하는 샘플 일뿐입니다.

도움은 문제가 ReDim 문에

+0

왜이 C의 #을 태그가 –

+0

@ChristopherCurrens을?. 제거 된 –

답변

1

을 이해할 수있을 것이다. Microsoft's definition of ReDim은 지정된 배열 경계가 항상 0에서 지정된 범위 (지정된 경우)로 이동하므로 본질적으로 ReDim - 2 항목 배열을 지정하므로 A, B 사이에 "공백"이 표시됩니다 , 및 C 요소.

ReDim newByte(0) 

ReDim 문을 변경하고 당신은 당신이 원하는 0 0에서 갈 수있는 newByte 배열 (단일 항목 배열)를 선언합니다 모든 잘해야한다.

+0

덕분에 당신이 나를 안심 재하는 대답 때 스티브, 난 그냥 알아 냈어! – melspring

0

VB.Net에서 Array.CreateInstance 메서드를 사용할 수도 있고 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 
관련 문제