江湖救急,什么是模2和 ,在线等,完成就结帐. 问题:对一段内容进行传送,在最后一个字节为前边内容的模2和,请问最后一个字节的内容是如何得到的,也就是模2和的算法. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对于keity() 你所说的就是xor运算,例如有以下数据:EB,90,84 最后的校验码为01 ,均为十六进制,又如:EB,90,83,06,05,ff,38 最后的校验码为c0请大家看看算法 可能是将字节相加的结果再取反+1(以下都是对字节计算)1.EB+90+84 = ff 取反 +1 = 012.EB+90+83+06+05+ff+38=40 取反+1 = c0 对于Keiy()可能是将字节相加的结果再取反+1(以下都是对字节计算)1.EB+90+84 = ff 取反 +1 = 012.EB+90+83+06+05+ff+38=40 取反+1 = c0你说的+是不是xor(异和),还是什么如是xor,如下写,var b:array of byte; br:byte; i:integer; r:integer;begin setlength(b,7); b[0]:=$eb; b[1]:=$90; b[2]:=$83; b[3]:=$06; b[4]:=$05; b[5]:=$ff; b[6]:=$38; br:=b[0]; for i:=low(b)+1 to high(b) do br:=br xor b[i]; //br最后得到为3c ,不是40 // br:=Lo(i); //br:=$40; br:=not br; br:=br+1; edit1.text:=format('%X',[br]); liu9527(小刀)说的是正确的,“模二和”就是对数据进行异或运算,这是一种最简单的数据校验方式,很常见的。 ifPyh:但是我不能得到正确的结果,也就是说根据我上面写的得到校验码不符合结果如:EB,90,83,06,05,ff,38 我计算的值是(3c 而后3c取反+1, )和 最后的校验码(c0)不相同,怎么回事?也就是不知道keiy() ( ) 的2.EB+90+83+06+05+ff+38=40 取反+1 = c0 是怎么得来的 我是用按位+(而非xor)而得的结果(以字节计算) 程序如下:procedure TForm1.Button1Click(Sender: TObject);var b:array of byte; br:byte; i:integer; r:integer;begin setlength(b,7); b[0]:=$eb; b[1]:=$90; b[2]:=$83; b[3]:=$06; b[4]:=$05; b[5]:=$ff; b[6]:=$38; br:=b[0]; for i:=1 to 6 do br:=br+b[i]; br:=not br; br:=br+1; Edit1.Text:=inttohex(br,2);end;结果为c0 谢谢 keiy() 马上结贴 帮忙看一看! @@@@和女友分手3个月,她又有新欢,郁闷!!!!!!狂郁闷!!!!!!!!!!!!! 给大家介绍一个招delphi人员的公司 关于DBGridEH的字段操作! 请问怎么消除一首歌的原唱呀,问题解决马上给分! 谁有FastReport V2.47的安装码,有高分送!!!!!! 关于IdTCPServer中的多线程及动态创建TADOQuery的问题 如何比较两个image 有相同的图 DELPHI 查询ACCESS数据库时间字段的问题 Office中复制的文字不能粘贴到Edit文本框里,怎么转换处理 个人所得税计算 請教一個兩層開發連接問題?知者請進,謝謝指導!!
你所说的就是xor运算,
例如有以下数据:EB,90,84 最后的校验码为01 ,均为十六进制,
又如:EB,90,83,06,05,ff,38 最后的校验码为c0
请大家看看算法
(以下都是对字节计算)
1.EB+90+84 = ff 取反 +1 = 01
2.EB+90+83+06+05+ff+38=40 取反+1 = c0
可能是将字节相加的结果再取反+1
(以下都是对字节计算)
1.EB+90+84 = ff 取反 +1 = 01
2.EB+90+83+06+05+ff+38=40 取反+1 = c0你说的+是不是xor(异和),还是什么
如是xor,如下写,
var
b:array of byte;
br:byte;
i:integer;
r:integer;
begin
setlength(b,7);
b[0]:=$eb;
b[1]:=$90;
b[2]:=$83;
b[3]:=$06;
b[4]:=$05;
b[5]:=$ff;
b[6]:=$38;
br:=b[0];
for i:=low(b)+1 to high(b) do
br:=br xor b[i];
//br最后得到为3c ,不是40
// br:=Lo(i);
//br:=$40;
br:=not br;
br:=br+1;
edit1.text:=format('%X',[br]);
也就是不知道
keiy() ( ) 的
2.EB+90+83+06+05+ff+38=40 取反+1 = c0 是怎么得来的
procedure TForm1.Button1Click(Sender: TObject);
var
b:array of byte;
br:byte;
i:integer;
r:integer;
begin
setlength(b,7);
b[0]:=$eb;
b[1]:=$90;
b[2]:=$83;
b[3]:=$06;
b[4]:=$05;
b[5]:=$ff;
b[6]:=$38;
br:=b[0];
for i:=1 to 6 do
br:=br+b[i];
br:=not br;
br:=br+1;
Edit1.Text:=inttohex(br,2);
end;
结果为c0
马上结贴