我一直致力于将大型javascript程序转换为java。但是我不确定这几行中发生了什么,以及如何将它变成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;
}
这是一个可分割的功能。 hash是一个字符串(特别是sha256字符串哈希)。有谁能帮我弄清楚这个奇怪的forloop?感谢。
我知道parseInt正在将其转换为16,因为我已经将该部分转换为代码中的其他部分。
答案 0 :(得分:3)
表示i = o 其中o大于零。否则o-4设为0
,直到 我不到hash.length
迭代 我每次4点
每次循环: val等于 -
val左移16位 加 基数为16的整数值的余数(对第i + 4个元素的散列元素)和“mod”
你没有提供mod的任何定义。
substring()方法从两个指定索引之间的字符串中提取字符,并返回新的子字符串。
此方法在“start”和“end”之间提取字符串中的字符,不包括“end”本身。
如果“start”大于“end”,则此方法将交换两个参数,即str.substring(1,4)== str.substring(4,1)。
如果“start”或“stop”小于0,则将其视为0。
它将输入解析为整数,第二个参数指定基数,这是数字系统的基础,在这种情况下是一个十六进制
Bitwise left Shift, the << operator
val因为我猜测已经是十六进制数字系统中的一个值所以这基本上在十进制系统中就像一个减1
Ternary operator , your for loop
唯一可以接受三个参数的运算符,基本上是if {} else {}循环的简写。
答案 1 :(得分:-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代码