You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:39:03