Golang将16进制HASH值转换为二进制字符串
因为某些原因,我需要在Golang中将hash值转换为二进制的字符串,比如将32位的MD5值转换为128位的二进制字符串;
本来想搬轮子,但网上大部分代码不尽人意,要么是实现方法不太理想,要么是转换的长度不正确,所以只好自己写了;
实现方法很多,比如创建一个16进制与二进制对应的表,对hash字符串逐个遍历查询然后组合即可;
我这里使用了另一种方法,大致思路如下:
- 逐字符遍历hash,将单个字符转换为二进制;
- 不满4位则填充;( 2^4 = 16,用2进制表示16进制需要用4位)
- 按顺序组合;
完整源码:
package util
import(
"strings"
"strconv"
)
func hash2bin(hash string)(string,int,error){
binary_string := ""
for _, char := range hash{
char_hex,err:= strconv.ParseInt(string(char),16,8)
if err!=nil{
return "",0,err
}
char_bin := ""
for ; char_hex > 0; char_hex /=2{
b := char_hex % 2
char_bin = strconv.Itoa(int(b))+char_bin
}
fill := 4-len(char_bin)
for fill>0{
char_bin = "0" + char_bin
fill -= 1
}
binary_string += char_bin
}
return binary_string,len(binary_string),nil
}