C# 如何简化这些方法以避免混淆?

C# 如何简化这些方法以避免混淆?,c#,.net,C#,.net,我今天来这里是想问一个关于这些方法的问题。作为一种业余爱好,我曾领导过一个个人项目,但不幸的是,我无法联系老开发人员询问这些方法的作用。我对C#相当陌生,所以我问是否有人能帮我简化它们,以避免我现在的困惑?如果有人能告诉我他们也在做什么,那真的会很有帮助 到现在为止,我只是对他们有点困惑。。。它们在实用程序文件夹中。该项目是一个游戏的仿真服务器,发送和接收数据包是主要关注点 public static int DecodeInt32(byte[] v) { if ((v[0] | v[1

我今天来这里是想问一个关于这些方法的问题。作为一种业余爱好,我曾领导过一个个人项目,但不幸的是,我无法联系老开发人员询问这些方法的作用。我对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];
}
公共静态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();