模式 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 算法中,此校验和也具有 属性,如果它与数据放在一起,则该组合的校验和为零。
我的代码中有这一行,但我似乎无法理解它是如何工作的 -(为了找到我的问题)
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 算法中,此校验和也具有 属性,如果它与数据放在一起,则该组合的校验和为零。