2016-04-03 5 views
2

Ich habe ein Array von Bytes mit einer unbekannten Größe und ich möchte alle vier Bytes in eine ganze Zahl konvertieren. Das Problem ist die unbekannte Größe als Sachen wie diese nicht funktionieren:Split-Byte-Array (unbekannte Größe) in Stücke mit Resten

Private Sub(ByVal list() as Byte) 
For i = 0 To list.Count - 1 Step 4 

Next 

Als ob die Größe nicht divideable ist es eine Ausnahme verursacht durch 4. Also wie kann ich das Array von Bytes in Stücke von vier Bytes aufteilen?

Dies ist mein aktueller Versuch, aber es verursacht eine Ausnahme.

Public Function MakeByteChunks(ByVal pByte() As Byte, ByVal pSize As Integer) As List(Of Byte()) 
    Dim chunkList As New List(Of Byte()) 
    For i = 0 To pByte.Count - 1 
     Dim tmpchunkList(pSize) As Byte 
     Array.Copy(pByte, i, tmpchunkList, 0, pSize) 
     chunkList.Add(tmpchunkList) 
    Next 
    Return chunkList 
End Function 

wenn ich versuche, es auf ganze Zahlen zu konvertieren:

Dim splittedArray = MakeByteChunks(list, 1) 
     For i = 0 To splittedArray.Count - 1 

Dim Value = BitConverter.ToInt32(splittedArray(i), 0)})    
     Next 
+1

Das hängt davon ab, was Sie in der Schleife tun. Der Code, den Sie uns gerade zeigen, scheint vollkommen sicher zu sein. – derpirscher

+0

Wie gesagt, ich versuche, alle vier Bytes in eine ganze Zahl zu konvertieren. Das ist, weil ich Integer aus einem Bytearray lesen möchte. Und BitConverter.ToInt32 nimmt nur den Offset als Parameter. – Baldik

+0

Dann zeigen, wie machst du es – derpirscher

Antwort

1

Wenn das Problem der letzte Brocken ist, die kürzer als 4 sein kann wie diese

tut nur
Private Sub(ByVal list() as Byte) 
For i = 0 To (list.Count - 3) - 1 Step 4 

Next 
0

convert Byte-Array zum Auflisten mit der ToList-Methode und Hinzufügen weiterer Elemente mit (bytes.Count() + bytes.Count() mod 4). Beispiel:
var Bytes = Enumerable.Repeat (1, 14) .Wählen Sie (b => (Byte) b). ToArray();
var temp = bytes.ToList();
Temp.AddRange (Enumerable.Repeat ((Byte) 0, Bytes.Count()% 4). ToArray());

oder einfach eine ganze Zahl Methode erstellen (Array-Länge unter Verwendung genannte Array erhalten) und Buffer.BlockCopy verwenden, um Elemente zu kopieren einfach:

var temp2 = new int[(bytes.Length + bytes.Length % 4)/4]; 
      Buffer.BlockCopy(temp2, 0, bytes, 0, bytes.Count()); 
Verwandte Themen