我正在尝试将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
任何帮助都是天赐之物。感谢。
答案 0 :(得分:0)
hex()
会返回0xF1
之类的内容(因此需要[2:]
),而Integer.toHexString()
会返回F1
之类的内容(因此不需要下标)。< / p>
对于程序到程序翻译的这种情况,我建议只选择一个简单的输入(在这种情况下,一个字母/地图与单个元素,因为元素顺序可能不同)并在两个调试器中运行程序,比较变量的值。