试图将python令牌生成器转换为java

时间:2017-08-23 14:09:58

标签: java python

我正在尝试将python函数转换为Java,我似乎对生成的结果有一些问题。这可能是我的方法我不确定,但我认为我已正确转换它,但返回值不一样。

Python代码

def __token(d):
    try:
        token = 857

        for k, v in d.iteritems():
            n = 0

            k = 'location' + k

            for i in range(len(k)):
                n += ord(v[i]) if i < len(v) else 0
                n += ord(k[i]) if i < len(k) else 0

            n = hex(n)[2:]
            i = 0

            for e in range(len(n)):
                i += ord(n[e])

            token += i

        return token

    except Exception:
        return

Java代码

private long token(final Map<String, String> data)
{
    long token = 857;

    for (final String key : data.keySet())
    {
        int n = 0;

        final String k = "location" + key;
        for (int i = 0; i < k.length(); i++)
        {
            n+= (i < data.get(key).length()) ? (int) data.get(key).toCharArray()[i] : 0;
            n+= (i < k.length()) ? (int) k.toCharArray()[i] : 0;
        }

        final String subN = Integer.toHexString(n).substring(2);
        int i = 0;

        for (int e = 0; e < subN.length(); e++)
        {
            i += (int) subN.toCharArray()[e];
        }

        token += i;
    }

    return token;

当我使用以下代码执行python代码时:

token = str(__token({'id': 'o89jqj', 'update': '0', 'ts': '1503414000'}))

我得到了结果: 1417

当我使用以下代码执行我的java代码时:

final Map<String, String> tokenMap = new HashMap<>();
tokenMap.put("id", "o89jqj");
tokenMap.put("update", "0");
tokenMap.put("ts", "1503414000");

final String token = String.valueOf(token(tokenMap));

我得到的结果是 1104

任何帮助都是天赐之物。感谢。

1 个答案:

答案 0 :(得分:0)

hex()会返回0xF1之类的内容(因此需要[2:]),而Integer.toHexString()会返回F1之类的内容(因此不需要下标)。< / p>

对于程序到程序翻译的这种情况,我建议只选择一个简单的输入(在这种情况下,一个字母/地图与单个元素,因为元素顺序可能不同)并在两个调试器中运行程序,比较变量的值。