让我开始说我对Delphi一无所知......
我正在尝试将一个用 delphi 编写的旧应用程序移植到 java,但事情不正常......
我有这个函数可以对两个字节进行一些二进制操作。Delphi 中的代码如下:
function TMainForm.mixthingsup(x, y: byte): word;
var
counter: byte;
answer1, answer2: byte;
begin
answer1 := $9D xor x;
for counter := 1 to 8 do
begin
if (answer1 and $80) = $80 then
answer1 := (answer1 shl 1) xor $26
else
answer1 := (answer1 shl 1);
end;
answer2 := answer1 xor y;
for counter := 1 to 8 do
begin
if ((answer2 and $80) = $80) then
answer2 := ((answer2 shl 1) xor $72)
else
answer2 := (answer2 shl 1);
end;
Result := (answer1 shl 8) or answer2;
end;
这是我的java代码:
public static String mixthingsup(String data)
{
byte[] conv=null;
byte c9d;
byte c80;
byte c26;
byte c72;
byte x,y;
byte res1, res2;
byte res;
conv=hexStringToByteArray(data.substring(0, 2));
x=conv[0];
conv=hexStringToByteArray(data.substring(2, 4));
y=conv[0];
conv=hexStringToByteArray("9d");
c9d=conv[0];
conv=hexStringToByteArray("80");
c80=conv[0];
conv=hexStringToByteArray("26");
c26=conv[0];
conv=hexStringToByteArray("72");
c72=conv[0];
res1=(byte) (c9d ^ x);
for(int i=1; i<9; i++)
{
if((res1 & c80) == c80)
res1=(byte) ((res1 << 1) ^ c26);
else
res1=(byte) (res1 << 1);
}
res2=(byte) (res1 ^ y);
for(int i=1; i<9; i++)
{
if((res2 & c80) == c80)
res2=(byte) ((res2 << 1) ^ c72);
else
res2=(byte) (res2 << 1);
}
res=(byte) ((res1 << 8) | res2);
return Integer.toHexString(res);
}
例如,当 delphi 函数返回 A8 77 的 CA BA 时,java 函数返回 FF FF FF BA
有什么想法吗?有什么帮助吗?
谢谢,佩德罗