我正在尝试将此Delphi代码转换为C#
function TWebModule1.DecodeA(Auth: string): Word;
var
iAuth: Cardinal;
r: Cardinal;
begin
iAuth := StrToInt64(Auth);
r := (iAuth and $FFFF0000) shr 16;
Result := (iAuth and $FFFF) xor r xor $9752;
end;
这是我用C#编写的内容,但没有给我预期的结果。
private Int64 DecodeA(Int64 auth)
{
try
{
var r = (auth & 0xFFFF0000) >> 16;
var result = (auth & 0xFFFF) ^ r ^ 0x9752;
_log.DebugFormat("Decoding of {0} returned {1}", auth, result);
return result;
}
catch (Exception ex)
{
_log.Fatal(ex);
throw new Exception(ex.Message);
}
}
示例:auth = 3216841950的结果应为41022
感谢您提供的任何信息。
最佳答案
如果您在两种语言中使用相同的数据类型,那么它就可以立即使用:
Delphi版本
function DecodeA(iAuth: Int64): Int64;
var
r: Int64;
begin
r := (iAuth and $FFFF0000) shr 16;
Result := (iAuth and $FFFF) xor r xor $9752;
end;
C#版本
private Int64 DecodeA(Int64 iAuth)
{
Int64 r = (iAuth & 0xFFFF0000) >> 16;
return (iAuth & 0xFFFF) ^ r ^ 0x9752;
}
在两种语言中,DecodeA(3216841950)等于13361