Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用校验和的数据包数据?_C#_Checksum_Packet - Fatal编程技术网

C# 使用校验和的数据包数据?

C# 使用校验和的数据包数据?,c#,checksum,packet,C#,Checksum,Packet,我有数据包,我将其存储为公共静态列表数据包=新列表() 最后一个字节是校验和,我想知道如何使用它来检查数据包数据 当我有一个完整的数据包时,我运行: //get checksum byte chcksm = packet[packet.Count - 1]; int sum = chcksm; 获取校验和字节的值 然后我跑: //checksum calculation public static byte Compute

我有数据包,我将其存储为
公共静态列表数据包=新列表()

最后一个字节是校验和,我想知道如何使用它来检查数据包数据

当我有一个完整的数据包时,我运行:

//get checksum                                    
byte chcksm = packet[packet.Count - 1];
int sum = chcksm;
获取校验和字节的值

然后我跑:

//checksum calculation
public static byte ComputeAdditionChecksum(List<byte> data)
{
    byte sum = 0;
    unchecked // Let overflow occur without exceptions
    {
        foreach (byte b in data)
        {
            sum += b;
        }
    }
    return sum;
}

看起来您的计算中包含了校验和。在没有看到具有预期和实际结果的基础数据的情况下,我认为按如下方式更改循环应该可以解决问题:

public static byte ComputeAdditionChecksum(List<byte> data)
{
    byte sum = 0x40;
    unchecked // Let overflow occur without exceptions
    {
        for (var i = 0; i < data.Count - 1;  i++)
        {
            sum -= data[i];
        }
    }
    return sum;
}
公共静态字节计算添加校验和(列表数据)
{
字节和=0x40;
未选中//让溢出在没有异常的情况下发生
{
对于(var i=0;i
看起来您的计算中包含了校验和。在没有看到具有预期和实际结果的基础数据的情况下,我认为按如下方式更改循环应该可以解决问题:

public static byte ComputeAdditionChecksum(List<byte> data)
{
    byte sum = 0x40;
    unchecked // Let overflow occur without exceptions
    {
        for (var i = 0; i < data.Count - 1;  i++)
        {
            sum -= data[i];
        }
    }
    return sum;
}
公共静态字节计算添加校验和(列表数据)
{
字节和=0x40;
未选中//让溢出在没有异常的情况下发生
{
对于(var i=0;i
啊,谢谢,这很有道理。我不得不将
data.Length
更改为
data.Count
,因为它是一个列表。尽管数据看起来正确,但我仍然看到奇怪的结果,其中校验和高于数据包总数。我不知道如何在这里发布字节数据是一种有用的方法!啊,是的,我很抱歉,在我的脑海里你使用的是数组而不是列表。你确定你在用与数据源相同的方法计算校验和吗?我不确定!(我对这种数据包很陌生)还有什么别的方法可以尝试?谢谢您的帮助。听起来您需要阅读文档以获取数据源。校验和可以以任何方式创建。我能看到的唯一区别是它们对数据包中每个字节的值进行减法而不是加法。更新了我的答案…啊,谢谢,这很有意义。我不得不将
data.Length
更改为
data.Count
,因为它是一个列表。尽管数据看起来正确,但我仍然看到奇怪的结果,其中校验和高于数据包总数。我不知道如何在这里发布字节数据是一种有用的方法!啊,是的,我很抱歉,在我的脑海里你使用的是数组而不是列表。你确定你在用与数据源相同的方法计算校验和吗?我不确定!(我对这种数据包很陌生)还有什么别的方法可以尝试?谢谢您的帮助。听起来您需要阅读文档以获取数据源。校验和可以以任何方式创建。我能看到的唯一区别是它们对数据包中每个字节的值进行减法而不是加法。更新了我的答案。。。