2016-07-04 107 views
-1

我一直致力於將一個大型javascript程序轉換爲java。但是我不確定在這幾行中發生了什麼,以及如何將它變成java。將javascript轉換爲java

int val = 0; //already turned to java 

    int o = hash.length() % 4; //already turned to java 

for (var i = o > 0 ? o - 4 : 0; i < hash.length; i += 4) { 
     val = ((val << 16) + parseInt(hash.substring(i, i+4), 16)) % mod; 
    } 

它是一個可分的功能。散列是一個字符串(特別是一個sha256字符串散列)。任何人都可以幫我弄清楚這個奇怪的forloop?謝謝。

我知道parseInt將它變成了基數16,因爲我已經在代碼中翻譯了該部分的其他地方。

+0

for-clause只是一個三元運算符,用於將i設置爲o-4或0。<< <<'部分是一個按位運算符,但我不能100%確定該計算的結果是什麼。 – Shilly

+3

[位移和位移運算符](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html),[Java Conditional Operator](https://docs.oracle.com/javase/) tutorial/java/nutsandbolts/op2.html),[Integer。parseInt函數(https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String中,%20int))。除了parseInt的用法外,唯一的非Java語法是'var i',它會變成'int i'。當然,'hash.length'變成'hash.length()'。 – nbrooks

+0

我的理解力不夠,以前從來沒有見過位運算符和位移運算符,謝謝你清理這個@nbrooks – Lain

回答

3

對於i = O 其中o是大於零。別的O-4設定爲0

直到 我小於每次

在每次循環hash.length

迭代 i增加4: val爲等於 -

val左移16位 加 剩餘的整數值與基數16(散列的第i個元素到i + 4元素)和「mod」

您還沒有提供mod的任何解釋。

substring()方法從兩個指定索引之間的字符串中提取字符,並返回新的子字符串。

該方法提取「start」和「end」之間的字符串中的字符,不包括「end」本身。

如果「start」大於「end」,則此方法將交換兩個參數,即str.substring(1,4)== str.substring(4,1)。

如果任一「啓動」或「停止」小於0,它將被視爲好像它是0。

parseInt() function

它分析輸入爲一個整數加上所述第二參數指定的基數即數字系統的基地在這種情況下它是一個十六進制

Bitwise left Shift, the << operator

VAL如我猜已經在十六進制數系統中的值,從而這基本上在十進制系統中會像一個減1

Ternary operator , your for loop

的唯一操作者可以採取三個參數,基本上短手用於如果{}否則{}環。

-1
int val = 0; //already turned to java 

int o = hash.length() % 4; //already turned to java 

for (int i = o > 0 ? o - 4 : 0; i < hash.length; i += 4) { 
    val = ((val << 16) + Integer.parseInt(hash.substring(i, i+4), 16)) % mod; 
} 

這是java代碼

+0

這不會編譯,也不會回答代碼正在做什麼的問題。 – nbrooks

+0

@nbrooks「如何將它變成java」 - 這是問題的這一部分的答案。功能的東西已經在評論中 – Blobonat