我今天来这里询问有关这些方法的问题。作为一种爱好,我在个人项目中处于领先地位,不幸的是我无法联系旧开发人员询问这些方法甚至做了什么。我对C#很新,所以我问是否有人可以帮助我简化它们,以避免我遇到的混乱?如果有人能真正告诉我他们做了什么也会有所帮助。
我现在对他们有点困惑......他们在公用文件夹中。该项目是游戏的仿真服务器,发送和接收数据包是主要关注点。
public static int DecodeInt32(byte[] v)
{
if ((v[0] | v[1] | v[2] | v[3]) < 0)
{
return -1;
}
return (v[0] << 0x18) + (v[1] << 0x10) + (v[2] << 8) + v[3];
}
public static int DecodeInt16(byte[] v)
{
if ((v[0] | v[1]) < 0)
{
return -1;
}
return (v[0] << 8) + v[1];
}
以下是使用它们的代码的一部分,可能有助于查找?
using (BinaryReader Reader = new BinaryReader(new MemoryStream(Data)))
{
if (Data.Length < 4)
return;
int MsgLen = Utilities.DecodeInt32(Reader.ReadBytes(4));
if ((Reader.BaseStream.Length - 4) < MsgLen)
{
this._halfData = Data;
this._halfDataRecieved = true;
return;
}
else if (MsgLen < 0 || MsgLen > 5120)//TODO: Const somewhere.
return;
byte[] Packet = Reader.ReadBytes(MsgLen);
using (BinaryReader R = new BinaryReader(new MemoryStream(Packet)))
{
int Header = Utilities.DecodeInt16(R.ReadBytes(2));
byte[] Content = new byte[Packet.Length - 2];
Buffer.BlockCopy(Packet, 2, Content, 0, Packet.Length - 2);
ClientPacket Message = new ClientPacket(Header, Content);
try
{
Server.GetGame().GetPacketManager().TryExecutePacket(this, Message);
}
catch (Exception e)
{
ExceptionLogger.LogException(e);
}
this._deciphered = false;
}
if (Reader.BaseStream.Length - 4 > MsgLen)
{
byte[] Extra = new byte[Reader.BaseStream.Length - Reader.BaseStream.Position];
Buffer.BlockCopy(Data, (int)Reader.BaseStream.Position, Extra, 0, (int)(Reader.BaseStream.Length - Reader.BaseStream.Position));
this._deciphered = true;
HandleMoreData(Extra);
}
}
答案 0 :(得分:2)
BinaryReader
包含方法ReadInt16
和ReadInt32
(以及许多其他方法)。因此,您可以替换解码方法。
int MsgLen = Utilities.DecodeInt32(Reader.ReadBytes(4));
变为
int MsgLen = Reader.ReadInt32();
我认为Endianness字节的this适用于BinaryReader
方法。