我正在尝试将此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

10-08 03:09