2017-08-23 4 views
0

Python関数をJavaに変換しようとしていますが、生成された結果に問題があるようです。私のアプローチはわかりませんが、私はそれを正しく変換したと思いますが、戻り値は同じではありません。pythonトークンジェネレータをJavaに変換しようとしています

ザ・パイソンコード

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'})) 

が、私は結果が得られます。 私は次のように私のJavaコードを実行する1417

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)); 

私は任意のヘルプは天の恵みとなり、結果

を取得します。ありがとう。

答えて

0

hex()戻り0xF1のようなもの(そう[2:]が必要とされている)、Integer.toHexString()F1(そう添字が必要とされていない)のようなものを返しながら。

このようなプログラムからプログラムへの変換の場合、単純な入力(この場合、要素の順序が異なる可能性があるため、単一の要素を持つ辞書/マップ)を選択し、2つのデバッガ変数の値を比較します。

+0

ヘックスからストリングへの提案と説明をありがとう。 – Greco

関連する問題