我想将一个字哈希到固定比特哈希值,比如64比特,32比特(二进制)。
我使用了以下代码
...
Review.create(req.body).then(function(review) {
review.reviewer = req.user.id;
review.application = req.params.applicationId;
return Q.all([
review.save(),
User.findByIdAndUpdate(review.reviewer, {$push: {reviews: review._id}}).exec(),
Application.findByIdAndUpdate(review.application, {$push: {reviews: review._id}}).exec(),
]).then(function() {
...
然后通过以下函数将murmur_hash值转换为二进制值
long murmur_hash= MurmurHash.hash64(word);
是否有任何直接哈希方法转换为二进制文件?
答案 0 :(得分:1)
请使用此
Integer.toBinaryString(int i)
答案 1 :(得分:0)
另一种方法是使用
Integer.toString(i, radix)
你可以得到第二个参数指定的基数(二进制 - 2,八进制 - 8,十进制 - 10,十六进制 - 16)中第一个参数i的字符串表示。
答案 2 :(得分:0)
如果你想转换成一个固定的二进制字符串,也就是说,总是得到一个带有零填充的64个字符的长字符串,那么你有几个选项。如果你有Apache的StringUtils,你可以使用:
StringUtils.leftPad( Long.toBinaryString(murmurHash), Long.SIZE, "0" );
如果不这样做,您可以自己编写填充方法:
public static String paddedBinaryFromLong( long val ) {
StringBuilder sb = new StringBuilder( Long.toBinaryString(val));
char[] zeros = new char[Long.SIZE - sb.length()];
Arrays.fill(zeros, '0');
sb.insert(0, zeros);
return sb.toString();
}
此方法首先使用Long.toBinaryString(long)
方法,方便您进行位转换。如果值小于64个字符,它唯一不做的就是在左侧填充。
下一步是创建一个0
个字符数组,并在左侧填充缺少的零。
最后,我们在StringBuilder
的开头插入了零数组,并且我们有一个64个字符的零填充位字符串。
注意:使用Long.toBinaryString(long)
和Long.toString(long,radix)
之间存在差异。差异是负数。在第一个中,您将获得该数字的完整,二进制补码值。在第二个中,您将获得带有减号的数字:
System.out.println(Long.toString(-15L,2));
结果:
-1111
System.out.println(Long.toBinaryString(-15L));
结果:
1111111111111111111111111111111111111111111111111111111111110001