我一直致力于将一个大型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,因为我已经在代码中翻译了该部分的其他地方。
for-clause只是一个三元运算符,用于将i设置为o-4或0。<< <<'部分是一个按位运算符,但我不能100%确定该计算的结果是什么。 – Shilly
[位移和位移运算符](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
我的理解力不够,以前从来没有见过位运算符和位移运算符,谢谢你清理这个@nbrooks – Lain