嘿,我有那段代码不起作用,并且一直让我的模拟器崩溃..
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);
但现在主要问题来自BlockCopy。
编辑:我在代码中更详细,我发现了主要错误。
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;
}
答案 0 :(得分:0)
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;
}