模式 256 说明

mode 256 exaplin

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

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;

        }

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

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

由于 (a + b) mod c = ((a mod c) + (b mod c)) mod c 中间和已经可以减少 modulo 256。转换为 byte 隐式执行 modulo 256,[=13 也是如此=] 两个字节之间。

最后(byte)(0 - lcs)执行求反modulo 256.

因为 x + (-x) = 0(根据定义)即使在 mod-256 算法中,此校验和也具有 属性,如果它与数据放在一起,则该组合的校验和为零。