我想转换以下哈希" d41d8cd98f00b204e9800998ecf8427e"到二进制字符串。但是,我似乎找不到办法做到这一点?有人可以教我如何在Scala中完成它吗?感谢
答案 0 :(得分:5)
使用BigInt
:
scala> BigInt("d41d8cd98f00b204e9800998ecf8427e", 16).toString(2)
res0: String = 11010100000111011000110011011001100011110000000010110010000001001110100110000000000010011001100011101100111110000100001001111110
上面的16
表示字符串应该用十六进制解析(基数为16),而2
表示输出字符串应该是二进制(基数为2)。
如果要将原始二进制文件转储到文件中,可以将BigInt
转换为字节数组并转储:
scala> BigInt("d41d8cd98f00b204e9800998ecf8427e", 16).toByteArray
res1: Array[Byte] = Array(0, -44, 29, -116, -39, -113, 0, -78, 4, -23, -128, 9, -104, -20, -8, 66, 126)
请注意,这会为您提供17个字节,而不是您希望的128位哈希值。这是因为BigInt是一个带符号的值,所以它在最重要字节的位置用一个额外的0
填充字节数组,以防止该值被解释为负数。您可以使用res1.takeRight(16)
仅抓取您可能感兴趣的16个字节。