C# 模式256示例
我的代码中有这一行,我似乎无法理解它是如何工作的-(为了找到我的问题) 我知道结果应该是89C# 模式256示例,c#,checksum,C#,Checksum,我的代码中有这一行,我似乎无法理解它是如何工作的-(为了找到我的问题) 我知道结果应该是89 checksum = 0- (277(16) mode 256) 但我不记得为什么了 这是C# 这是一个简单的校验和。背后的数学是: gen(data) = -sum(data) mod 256 由于(a+b)mod c=((a mod c)+(b mod c))mod c中间和已经可以减少到模256。强制转换为字节会隐式执行模256运算,两个字节之间的+=也是如此 最后,(字节)(0-lcs)执行
checksum = 0- (277(16) mode 256)
但我不记得为什么了
这是C#
这是一个简单的校验和。背后的数学是:
gen(data) = -sum(data) mod 256
由于(a+b)mod c=((a mod c)+(b mod c))mod c
中间和已经可以减少到模256。强制转换为字节
会隐式执行模256运算,两个字节之间的+=
也是如此
最后,(字节)(0-lcs)
执行求反模256
因为即使在mod-256算术中,
x+(-x)=0
(根据定义),该校验和的属性是,如果将其与数据放在一起,则该组合的校验和为零。这是一个简单的校验和。背后的数学是:
gen(data) = -sum(data) mod 256
由于(a+b)mod c=((a mod c)+(b mod c))mod c
中间和已经可以减少到模256。强制转换为字节
会隐式执行模256运算,两个字节之间的+=
也是如此
最后,(字节)(0-lcs)
执行求反模256
因为即使在mod-256算法中,
x+(-x)=0
(根据定义),该校验和也具有这样的特性:如果将其与数据放在一起,则该组合的校验和为零。这看起来并不像C#。没有模式
关键字。你不能写277(16)
。这不是有效的C#@CodeCaster,除非op。。。不,根本无效这是命令的逻辑你怎么会有277?首先,它不适合放在一个字节中。这看起来不像C。没有模式
关键字。你不能写277(16)
。这不是有效的C#@CodeCaster,除非op。。。不,根本无效这是命令的逻辑你怎么会有277?这不适合放在一个字节的第一位,好吧,但计算不相加-总和是277(十六进制)或631(十二进制),那么它是如何达到89(十六进制)或137(十二进制)?@David12123它不仅是模256,而且是一个求反,-0x277 mod 256是0x89顺便说一句,小心C中的%
运算符,对于有符号整数,它意味着余数,而不是真正的模:结果可能是负数。在这种情况下,您当然可以轻松地转换为字节。或者使用&0xFF
,这可以归结为相同的东西,但不改变类型。对不起,我看不到,你能告诉我怎么做吗?我试过用计算器,也试过用铅笔。。。。我们先取0x277 mod 256,换句话说,取botton 8位:0x77。用二进制编写:01110111。用十六进制的“-x=~x+1
”:~01101111+1=10001000+1=10001001
,这是“0x89
”。好的,但计算结果不相加-总和是277(十六进制)或631(十二进制),那么它是如何达到89(十六进制)或137(十二进制的)?@David12123它不仅是模256,也是一个求反,-0x277 mod 256是0x89顺便说一句,注意C#中的%
运算符,对于有符号整数,它表示余数,而不是真正的模:结果可能是负数。在这种情况下,您当然可以轻松地转换为字节。或者使用&0xFF
,这可以归结为相同的东西,但不改变类型。对不起,我看不到,你能告诉我怎么做吗?我试过用计算器,也试过用铅笔。。。。我们先取0x277 mod 256,换句话说,取botton 8位:0x77。用二进制编写:01110111。应用否定,使用十六进制的-x=~x+1
:~01101111+1=10001000+1=10001001
,即0x89
。
gen(data) = -sum(data) mod 256