如何在Scala中将64位十六进制数转换为二进制数?

时间:2015-10-11 21:19:11

标签: scala

我想转换以下哈希" d41d8cd98f00b204e9800998ecf8427e"到二进制字符串。但是,我似乎找不到办法做到这一点?有人可以教我如何在Scala中完成它吗?感谢

1 个答案:

答案 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个字节。