模式256 exaplin

时间:2018-10-09 11:03:47

标签: c# checksum

我的代码中有这一行,我似乎无法理解它的工作原理-(为了找到我的问题)

0- (277 in HEX mode 256)

我知道结果应该是89

checksum = 0- (277(16) mode 256)

但我不记得为什么

这是C#

byte[] ByteMessage = {0x30 , 0x31 , 0x48 , 0x41 , 0x4E , 0X4F , 0X56 , 0X45 , 0X52 , 0X03 } 
byte answer = gen (ByteMessage )


     public static byte gen(byte[] p)
        {
            byte lcs = 0;
            foreach (byte b in p)
            {
                lcs += b;

            }

            lcs = (byte)(0 - lcs);
            return lcs;

        }

1 个答案:

答案 0 :(得分:3)

这是一个简单的校验和。后面的数学是这样的:

gen(data) = -sum(data) mod 256

(a + b) mod c = ((a mod c) + (b mod c)) mod c以来,中间和已经可以以256为模减少。强制转换为byte隐式执行256模,+=也执行两个字节之间的操作。

最后,(byte)(0 - lcs)对256执行求反运算。

由于x + (-x) = 0(按定义),即使在mod-256算术中,此校验和也具有以下性质:如果将其与数据放在一起,则该组合的校验和为零。