繁体   English   中英

将字节数组(未知大小)拆分为带有剩余部分的块

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM