如何在Byte数组自定义位置向右移动指定长度字节并补零
VB.NET 自定义起始位置Byte数组右移实现方案
核心实现逻辑
- 新数组长度 = 原数组长度 + 待右移插入的字节长度,Byte数组初始化时默认元素值为0,空出的位置不需要额外赋值
- 分段复制原数组元素:
- 移位起始位置之前的元素,直接复制到新数组的相同索引位置
- 原数组从移位起始位置开始的所有元素,整体偏移「右移长度」后复制到新数组
- 特别说明:以下实现默认移位起始位置为0基索引,如果需要使用示例中的1基位置计数,将传入的起始位置减1即可。
通用实现代码
''' <summary> ''' 对Byte数组执行指定位置指定长度的右移,空出位置自动补0 ''' </summary> ''' <param name="originalData">原Byte数组</param> ''' <param name="startIndex">移位起始位置(0基索引)</param> ''' <param name="shiftLength">需要右移的字节长度</param> ''' <returns>右移补0后的新Byte数组</returns> Function ShiftByteArrayRight(originalData As Byte(), startIndex As Integer, shiftLength As Integer) As Byte() ' 校验参数合法性 If originalData Is Nothing OrElse startIndex < 0 OrElse startIndex >= originalData.Length OrElse shiftLength <= 0 Then Throw New ArgumentException("传入参数不合法,请检查起始位置和移位长度是否符合要求") End If ' 初始化新数组,默认元素值为0 Dim newLength As Integer = originalData.Length + shiftLength Dim result(newLength - 1) As Byte ' 复制起始位置之前的元素 Array.Copy(originalData, 0, result, 0, startIndex) ' 复制起始位置及之后的元素,整体偏移shiftLength Array.Copy(originalData, startIndex, result, startIndex + shiftLength, originalData.Length - startIndex) Return result End Function
测试用例(匹配需求示例)
' 原数组示例 Dim data() As Byte = {0, 128, 0, 4, 9, 9, 32, 0, 0, 0, 0, 0, 0, 0, 0} ' 从第4个元素(对应0基索引3)开始右移4个字节 Dim shiftedData = ShiftByteArrayRight(data, 3, 4) ' 输出结果和预期完全一致
方案说明
- 用.NET内置的
Array.Copy代替手动循环,性能远高于自定义遍历,特别适配大容量Byte数组场景 - 完全参数化设计,支持任意合法的起始位置和移位长度配置
- 不需要借助Stack等额外数据结构,直接操作数组性能最优
内容的提问来源于stack exchange,提问作者SoftWick
相关产品推荐
相关产品推荐

