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我这样做了谢谢,但我刚刚找到了问题的主要来源,介意再检查一遍代码吗,