Check Sum 计算方式:02H之后至03H之前,所有BYTE相加,所得值取2的补数,各位大姐大哥们帮个忙吧.如:02H O6H [Check Sum 2Byte] 03H function sCheckGroup(S:String):String;
var
i:Integer;
r:String;
sum:Integer;
a:Byte;
b:Byte;
begin
r:='';
sum:=0;
a:=0;
b:=0;
for i:=1 to Length(S) div 2 do
begin
if(i mod 2=1) then
sum:=sum+sUHex(s[i])*16+sUHex(s[i+1]);
end
//SysUtils.b
//a:= sum div 256;
a:=255-(sum Div 256);
b:=255-(sum Mod 256); if(b=255) then
begin
b:=0;
if(a=255) then a:=0;
end
Result:= sHex(a div 16)+ sHex(a Mod 16)+sHex(b div 16)+sHex(b mod 16);
end; function sHex(i:Byte):String;
begin
case i of
0:Result:='0';
1:Result:='1';
2:Result:='2';
3:Result:='3';
4:Result:='4';
5:Result:='5';
6:Result:='6';
7:Result:='7';
8:Result:='8';
9:Result:='9';
10:Result:='A';
11:Result:='B';
12:Result:='C';
13:Result:='D';
14:Result:='E';
15:Result:='F';
end;
end;
var
i:Integer;
r:String;
sum:Integer;
a:Byte;
b:Byte;
begin
r:='';
sum:=0;
a:=0;
b:=0;
for i:=1 to Length(S) div 2 do
begin
if(i mod 2=1) then
sum:=sum+sUHex(s[i])*16+sUHex(s[i+1]);
end
//SysUtils.b
//a:= sum div 256;
a:=255-(sum Div 256);
b:=255-(sum Mod 256); if(b=255) then
begin
b:=0;
if(a=255) then a:=0;
end
Result:= sHex(a div 16)+ sHex(a Mod 16)+sHex(b div 16)+sHex(b mod 16);
end; function sHex(i:Byte):String;
begin
case i of
0:Result:='0';
1:Result:='1';
2:Result:='2';
3:Result:='3';
4:Result:='4';
5:Result:='5';
6:Result:='6';
7:Result:='7';
8:Result:='8';
9:Result:='9';
10:Result:='A';
11:Result:='B';
12:Result:='C';
13:Result:='D';
14:Result:='E';
15:Result:='F';
end;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货