我想將下面的散列「d41d8cd98f00b204e9800998ecf8427e」轉換爲二進制字符串。但是,我似乎無法找到辦法做到這一點?有人能教我如何在Scala中做到這一點嗎?感謝如何將64位十六進制數轉換爲Scala中的二進制數?
1
A
回答
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個字節,而不是16你預計會有128位散列。這是因爲BigInt是一個有符號的值,所以它在字節數組的最高有效位置加上一個額外的0
來填充字節數組,以防止該值被解釋爲負值。您可以使用res1.takeRight(16)
來只抓取您可能感興趣的16個字節。
+0
它也丟失填充零。 – flup
相關問題
- 1. 將十六進制轉換爲二進制到十六進制?
- 2. 如何將十進制轉換爲二進制的64位?
- 3. 將十進制數轉換爲二進制/十六進制/八進制符號
- 4. 將十進制轉換爲十六進制/二進制
- 5. 十六進制轉換爲二進制
- 6. 十六進制轉換爲二進制
- 7. 將十進制轉換爲十六進制和十六進制
- 8. 如何將14位十六進制轉換爲十進制
- 9. 將八進制數轉換爲十進制和十六進制
- 10. 如何將十六進制NSData轉換爲十進制數組?
- 11. 將十六進制轉換爲二進制,然後轉換爲十進制
- 12. 將二進制位轉換爲十六進制值
- 13. 將二進制位集轉換爲十六進制(C++)
- 14. C++將二進制(64位)轉換爲十進制
- 15. 將excel中的Unicode十六進制數轉換爲十進制
- 16. 將十六進制轉換爲二進制和16位二進制補碼
- 17. 如何將十六進制轉換爲二進制iphone
- 18. 如何將十六進制轉換爲二進制?
- 19. 如何將十六進制轉換爲二進制
- 20. 如何在Excel中將64位數字轉換爲十六進制數字?
- 21. 將十進制數字轉換爲6位二進制數字
- 22. 如何將數字(十進制)轉換爲二進制(二進制)數字和從二進制到十進制?
- 23. 如何將十六進制數字轉換爲C++中的二進制文件?
- 24. 二進制轉換爲十六進制和十六進制轉換爲二進制
- 25. 將十進制轉換爲二進制,八進制和十六進制?
- 26. 十六進制到二進制轉換
- 27. 轉換十六進制到二進制
- 28. 二進制到十六進制轉換
- 29. 如何轉換OCaml中十六進制,十進制,十進制和二進制數之間的數字?
- 30. 混淆將C++中的十六進制轉換爲二進制
您希望的編碼是什麼? UTF-8? ASCII? – Reactormonk
UTF-8。其實我甚至不確定使用MessageDigest的MD5是否會給出64位散列。我只需要一個64位散列 – user2675516
那麼輸出類型應該是什麼?一個'字符串'?所以你想解析你的MD5到字符串的字節?這可能是無效的UTF-8。 – Reactormonk