简单的异或问题(在线等待) ( 积分: 50 )

  • 主题发起人 主题发起人 9898
  • 开始时间 开始时间
9

9898

Unregistered / Unconfirmed
GUEST, unregistred user!
字符串
1.00HNHK0001CRBTCRBT00000104DLGLGN 02162150TXBEG LOGIN:USER=crbtmml,PSWD=crbt123 (92字节)
按32位异或,对异或后的结果取反后的值是多少,为啥我算的总不对?
 
字符串
1.00HNHK0001CRBTCRBT00000104DLGLGN 02162150TXBEG LOGIN:USER=crbtmml,PSWD=crbt123 (92字节)
按32位异或,对异或后的结果取反后的值是多少,为啥我算的总不对?
 
你打算和什么值异或? 题目中没有啊
随手写了段代码你试试:
procedure XorString(var s: string
Value: Integer);
var
p: PIntegerArray;
pv: PByteArray;
i: Integer;
begin
p := pointer(s);
for i := 0 to length(s) div 4 - 1 do
p := not (p xor value);
pv := @p[length(s) div 4];
for i := 0 to length(s) mod 4 do
pv := not (pv xor pbyteArray(@value));
end;
 
哦,我也许理解你的意思了:
function CalcString(const s: string): Cardinal;
var
p: PIntegerArray;
pv: PByte;
i: Integer;
begin
p := pointer(s);
result := 0;
for i := 0 to length(s) div 4 - 1 do
result := result xor p;
pv := @result;
for i := length(s) div 4 shl 2 + 1 to length(s) do
begin
pv^ := pv^ xor s;
inc(pv);
end;
result := not result;
end;
 
改进了一下:
function CalcString(const s: string): Cardinal;
asm
PUSH ESI
PUSH EBX
MOV ESI, EAX
XOR EBX, EBX
MOV ECX, [EAX-4]
MOV EDX, ECX
SHR ECX, 1
SHR ECX, 1
JZ @@2
@@1:
LODSD
XOR EBX, EAX
LOOP @@1
@@2:
MOV ECX, EDX
AND ECX, 3
JZ @@4
@@3:
LODSB
XOR BL, AL
LOOP @@3
@@4:
NOT EBX
MOV EAX, EBX
POP EBX
POP ESI
RET
end;
 
答案不对呀,他们给我的答案是
D6AEFC8B
我怎样算都不对呀
 
自由界面和报表的完美解决方案!
http://www.anylib.com
 
同意Another_yes
 
但是,求出的结果不对呀,不是D6AEFC8B
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
418
import
I
后退
顶部