[英]Split byte array (unknown size) into chunks with leftovers
我有一个大小未知的字节数组,我想将每四个字节转换为一个整数。 问题是未知大小,因为这样的东西是行不通的:
Private Sub(ByVal list() as Byte)
For i = 0 To list.Count - 1 Step 4
Next
好像大小不能被4整除一样,会导致异常。 那么如何将字节数组拆分为四个字节的块呢?
这是我目前的尝试,但它会导致异常。
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
当我尝试将其转换为整数时:
Dim splittedArray = MakeByteChunks(list, 1)
For i = 0 To splittedArray.Count - 1
Dim Value = BitConverter.ToInt32(splittedArray(i), 0)})
Next
如果问题是最后一个可能比 4 短的块,就这样做
Private Sub(ByVal list() as Byte)
For i = 0 To (list.Count - 3) - 1 Step 4
Next
使用 ToList 方法将字节数组转换为列表,并使用 (bytes.Count() + bytes.Count() mod 4) 添加更多项目。 例子:
var bytes = Enumerable.Repeat (1, 14).Select(b => (Byte)b).ToArray();
var temp = bytes.ToList();
temp.AddRange(Enumerable.Repeat((byte)0, bytes.Count() % 4).ToArray());
或者简单地创建一个整数方法(使用提到的数组获取数组长度)并使用 Buffer.BlockCopy 轻松复制项目:
var temp2 = new int[(bytes.Length + bytes.Length % 4) / 4];
Buffer.BlockCopy(temp2, 0, bytes, 0, bytes.Count());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.