C# 如何简化这些方法以避免混淆?
我今天来这里是想问一个关于这些方法的问题。作为一种业余爱好,我曾领导过一个个人项目,但不幸的是,我无法联系老开发人员询问这些方法的作用。我对C#相当陌生,所以我问是否有人能帮我简化它们,以避免我现在的困惑?如果有人能告诉我他们也在做什么,那真的会很有帮助 到现在为止,我只是对他们有点困惑。。。它们在实用程序文件夹中。该项目是一个游戏的仿真服务器,发送和接收数据包是主要关注点C# 如何简化这些方法以避免混淆?,c#,.net,C#,.net,我今天来这里是想问一个关于这些方法的问题。作为一种业余爱好,我曾领导过一个个人项目,但不幸的是,我无法联系老开发人员询问这些方法的作用。我对C#相当陌生,所以我问是否有人能帮我简化它们,以避免我现在的困惑?如果有人能告诉我他们也在做什么,那真的会很有帮助 到现在为止,我只是对他们有点困惑。。。它们在实用程序文件夹中。该项目是一个游戏的仿真服务器,发送和接收数据包是主要关注点 public static int DecodeInt32(byte[] v) { if ((v[0] | v[1
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];
}
公共静态int DecodeInt32(字节[]v)
{
if((v[0]|v[1]|v[2]|v[3])<0)
{
返回-1;
}
return(v[0]二进制读取器
具有方法ReadInt16
和ReadInt32
(以及许多其他方法)。因此,您可以替换解码方法
int MsgLen = Utilities.DecodeInt32(Reader.ReadBytes(4));
变成
int MsgLen = Reader.ReadInt32();
我假设字节的大小适合于
二进制读取器
方法。DecodeInt32
基本上是将字节数组转换为32位整数。据我所知,(v[0]| v[1]| v[2]| v[3])
不能小于零。@PatrickArtner:不,一个sbyte
的范围从-128到127,一个字节从0到255。如果将-1
分配给一个字节,则得到(1,12):error CS0031:常量值
-1'无法转换为字节
。您是否从.NET知道?如果您发现此复杂,您可能需要在C#上进行修改-抱歉。它只是解析传入的流数据,前几个字节保存传入的数据量并缓冲数据,直到所有数据都存在。它的包处理,而不是rocket science;)如果它能工作,我会把它当作一个黑匣子,直到我摸索出如果设计成不破坏代码的话,包是如何工作的,而代码是在你和发送消息的那一端分开的data@mihi真可耻!谢谢你,伙计:)ReadInt32以相反的顺序读取字节。不过,谢谢你。ReadInt32()没有考虑到我正在读取4,是吗?它的顺序也是相反的。ReadInt16
读取两个字节。ReadInt32
读取四个字节。两者都将光标提前了这个字节数。根据源流中字节的尾数,它们可能会做正确的事情,也可能不会。如果您想确定,请确定测试。
int MsgLen = Reader.ReadInt32();