通讯中的校验和的检测,方法要求是:
校验和(8Byte)
16进制字符(0-F)表示的32位整数(8B)。
校验和的算法如下:
对“消息头+会话头+事务头+操作信息”按32位异或,对异或结果取反后的值为校验和。
1。有谁能告诉我有关dephi中对16进制的运算
2。取反运算如何实现
3。字符可以参加运算? 譬如:
消息头为 ='AABBCCD25478=:'ABcdF'';
会话头 ='FFCCBEG'SC'XXXPPYY';
事务头 ='XXYYBBDD';
操作信息 ='yyzzcc';
用dephi处理如何计算校验和,得到校验和(8Byte)请高手回答本人很着急!分数给100!
校验和(8Byte)
16进制字符(0-F)表示的32位整数(8B)。
校验和的算法如下:
对“消息头+会话头+事务头+操作信息”按32位异或,对异或结果取反后的值为校验和。
1。有谁能告诉我有关dephi中对16进制的运算
2。取反运算如何实现
3。字符可以参加运算? 譬如:
消息头为 ='AABBCCD25478=:'ABcdF'';
会话头 ='FFCCBEG'SC'XXXPPYY';
事务头 ='XXYYBBDD';
操作信息 ='yyzzcc';
用dephi处理如何计算校验和,得到校验和(8Byte)请高手回答本人很着急!分数给100!
解决方案 »
- delphi 在cad中画圆并填充颜色
- OraStoredProc.ParamByName( 'PICTURECONTENT_2 ').LoadFromFile(sTempFilename,ftblob); 为何只能
- 平安夜,祝大家快乐!顺便问一个问题:接送系统中,不同教室中播放不同学生姓名!
- 如何利用WebBrowser保存网页,但不打开"另存为"对话框按路径和指定文件名保存整个网页?
- 请教关于inherited的问题,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 如何获得网络服务器(srv)的时间与本机时间比较,并调整本机时间。
- 发放安装程序源码!
- 100分,问一个sql变量赋值给edit的小问题
- 不想hook,结果就是比较烦。。
- 如何向指定的邮箱发送一个文本文件?
- 使用db
- 再次提出问题,难道兄弟们都不能解决啊!
一会又说“16进制字符(0-F)表示的32位整数(8B)”,32位整数可只有4个字节哦
not-取反
异或和偶这边用这个方法算异或和,checksum:=a xor b xor c ...变量都是byte类型的,byte是8bit长度
你最好把对方的要求问清楚
procedure GetCheckCode(Data: string; out CheckCode: array of byte);
var
P, L, C: Integer;
begin
Setlength(CheckCode, 4); // 32位校验码(4字节),如果需要8字节,将这句的4改为8。
P := 1;
L := Length(Data);
if L mod 4 > 0 then // 考虑补齐的情况
begin
Data := Data + DupeString(#0, 4 - L mod 4);
Inc(L, 4 - L mod 4);
end;
C := 0;
while P < L do
begin
C := C xor Integer(@Data[P]);
Inc(P, 4);
end;
C := not C;
CopyMemory(@CheckCode[0], @C, 4);
end;function GetCheckCodeInt(Data: string): Integer;
var
CheckCode: array of byte;
begin
GetCheckCode(Data, CheckCode);
Result := Integer(@CheckCode[0]);
end;说明:
GetCheckCode() 是把校验码输出到字节数组,GetCheckCodeInt() 是把校验码输出为32位整型数。