C# c块复制偏移量和长度超出范围

C# c块复制偏移量和长度超出范围,c#,emulation,C#,Emulation,嘿,我有一段代码不起作用,一直在破坏我的模拟器 public byte[] SubArray(byte[] Data, int Offset, int Len) { byte[] Result = BitConverter.GetBytes(Len); Buffer.BlockCopy(Data, Offset, Result, 0, Len); return Result; } LoginServer.exe中发生类型为“Syst

嘿,我有一段代码不起作用,一直在破坏我的模拟器

public byte[] SubArray(byte[] Data, int Offset, int Len)
   {
        byte[] Result = BitConverter.GetBytes(Len);
        Buffer.BlockCopy(Data, Offset, Result, 0, Len);
        return Result;
    }
LoginServer.exe中发生类型为“System.ArgumentException”的首次意外异常

LoginServer.exe中发生类型为“System.ArgumentException”的未处理异常

其他信息:偏移量和长度超出了数组的界限,或者计数大于从索引到源集合末尾的元素数

我对C语言并没有真正的经验,但我尝试了很多方法,但都没有成功,我尽了最大努力进行搜索,但从来没有成功过,因为我无法阅读不同的代码

ps:我的字节结果是

byte[] Result = new byte[Len];
我认为这是个问题,所以我把它改成

byte[] Result = BitConverter.GetBytes(Len);
但现在主要的问题来自区块复制

编辑:我在代码中进行了更详细的说明,发现了主要错误

 public Packet(byte[] Buffer, bool FromServer, out int Length)
    {
        using (Stream stream = new MemoryStream(Buffer))
        using (BinaryReader Reader = new BinaryReader(stream))
        {
            byte SecBytesLen = Reader.ReadByte();
            ushort DataLen = Reader.ReadUInt16();
            Length = SecBytesLen + DataLen + 2;
            Opcode = (ushort)(Reader.ReadUInt16() >> 1);
            Data = SubArray(Buffer, 14, DataLen - 14);
        }
    }
我试着把那条线移开,但它没有撞坏

Data = SubArray(Buffer, 14, DataLen - 14);
如果您需要任何关于该代码中任何变量的详细信息,请告诉我

在那之前也找到了

public ushort Opcode = 0;
    public byte[] Data = new byte[0];

    public int ReaderPosition = 0;

    public Packet(ushort Opcode)
    {
        this.Opcode = Opcode;
    }
Len是一个整数,您将得到组成该整数的字节,因此它们是4个字节

如果您真正想要的是获得数组的一部分,我会从函数名中扣除它,那么您应该执行以下操作:

public byte[] SubArray(byte[] Data, int Offset, int Len)
{
    byte[] Result = new byte[Len];
    Buffer.BlockCopy(Data, Offset, Result, 0, Len);
    return Result;
}

检查偏移量+Len值是否不大于Data.Length(当调用子数组时)。Ye我找到了错误的主要来源。再次检查并告诉我。我尝试调试块副本中的每个变量,得到了System.Byte[]14 System.Byte[]51428Ye我这样做了谢谢,但我刚刚找到了问题的主要来源,介意再检查一遍代码吗,