我使用了一个Sha 256散列函数,它返回[u8; 32],因为256位长的哈希太大,无法用Rust的本机类型表示。
这些都很好,但是我需要从哈希生成一个二进制数,并检查二进制数中有多少个前导零。
有什么好办法吗?
到目前为止,我试图将每个单独的u8转换为它的二进制形式,并将它们连接在一起,但这并不能生成正确的数字。
pub fn to_bits(arr: &[u8; 32]) -> String {
let mut final_str = String::new();
for i in arr {
final_str.push_str(&format!("{:b}", i));
}
final_str
}
1条答案
按热度按时间2ledvvac1#
实际上,你不需要把它转换成另一种形式就可以做到这一点。每个字节都可以用
u8::leading_zeros
来检查它的前导零位,所以你可以写这样的东西(包括测试):我们依次查看每个字节,如果一个字节的前导零少于8个,那么我们至少看到了一个1,所以跳出循环。