xor校验和

只能将字符串的每个字符的Ascii码和某数字进行xor

s1 := 'abc';
s2 := '123';
s := '';
For i := 1 To Length( s1 ) Do
s := s + Chr( Ord( s1[i] ) XOR Ord( s2[i] )

举例得分
1.异或校验和 (所有字节异或)
2. 累加异或校验和 (算术相加并舍去进位)

二进制1111 xor 1100 = 0011

function xortest(buffer:array of byte):byte;
var
i,len:integer;
begin
result:=$11;
len:=length(buffer);
for i:=0 to len-1 do
result:=result xor buffer[i];
end; //起始值$11可以再考虑一下

求校验和的问题楼主zhudongpo(phil)2005-07-15 14:45:04 在 Delphi / 网络通信/分布式开发 提问
procedure A8051tran(Data:string); //以16进制形式下载
var
Len:integer; //数据长度
SendStr:string; //发送的数据
ChkSum:integer; //校验和
I:integer; //求校验和时的循环变量
begin
ChkSum:=0;
SendStr:=''; //清空传送字串
Len:=Length(Data);
SendStr:=chr($FA)+chr($FB)+chr($FD)+chr(Len)+Data;
for i:=1 to length(SendStr) do
chksum:=chksum+ord(sendstr[i]);
chksum:=chksum mod 256; //检查码
SendStr:=SendStr+chr(chksum); //CR
sleep(10);
F_https://www.360docs.net/doc/0e19031845.html,m1.WriteCommData(pchar(SendStr) ,length(SendStr));
Sleep(10);
end;

上面使我的发送函数,比如Data为“?”时经过上面函数的处理,通过串口助手16进制接收
得到的 就是 FAFBFD013F32,现在我通过串口助手给计算机发送FAFBFB013F32,我需要根据
FAFBFB013F计算校验和,判定校验位是否正确,如果正确则说明发送中没有错误,因为现在的
数据是FAFBFB013F,而不是chr($FA)+chr($FB)+chr($FD)+chr(Len)+Data,不能在通过
for i:=1 to length(SendStr) do
chksum:=chksum+ord(sendstr[i]);
chksum:=chksum mod 256; //检查码
SendStr:=SendStr+chr(chksum); //CR
求校验和了
现在有2个问题
1:怎样求FAFBFD013F的校验和,校验和应该是32,该如何处理那,或者说 如何判断传来的数据是
正确的 ,通过何种方法?
2:怎样把3F变回发送?


相关主题
相关文档
最新文档