如何编写Java字符串。格式化为ruby代码?
如何用ruby编写此代码?我听不懂字符串。格式(“%04d”,validateHash(散列)?((0xFC &;散列[0])<&书信电报;5) |(hash[hash.length-1]&;0x7F):0)强>
private static final int MINIMUM_HASH_LENGTH = 20;
public static String calculateVerificationCode(byte[] hash) {
return String.format("%04d", validateHash(hash) ? ((0xFC & hash[0]) << 5) | (hash[hash.length - 1] & 0x7F) : 0);
}
private static boolean validateHash(byte[] hash) {
return hash != null && hash.length >= MINIMUM_HASH_LENGTH;
}
# 1 楼答案
让我们一步一步地讨论比特运算
让我们假设我们的散列是
"some_string"
,字节表示是:第一部分是获取数组的第一个字节
115
,并对252
执行按位and运算(FC
是252
的十六进制表示形式)。如果我们将其转换为二进制,它将如下所示:结果将向左移动5
下一步是获取数组的最后一个元素并执行按位and(&;)使用
127
(7F
是127
的十六进制表示形式)的操作最后一步是获取这两个结果并执行按位OR运算
如果我们将其转换为整数,我们将得到
3687
神奇的数字127和252可能是精心挑选的,以保证良好的分布,所以请将它们视为给定值。我们需要从何处获取更多信息来解释这些值
验证还确保哈希至少有20个字节,否则这些操作可能无法生成良好的分发
整个Ruby代码如下所示:
如果数字小于1000,则
to_s.rjust(4, "0")
确保在左侧用零填充