Golang将16进制HASH值转换为二进制字符串


因为某些原因,我需要在Golang中将hash值转换为二进制的字符串,比如将32位的MD5值转换为128位的二进制字符串;

本来想搬轮子,但网上大部分代码不尽人意,要么是实现方法不太理想,要么是转换的长度不正确,所以只好自己写了;

实现方法很多,比如创建一个16进制与二进制对应的表,对hash字符串逐个遍历查询然后组合即可;

我这里使用了另一种方法,大致思路如下:

  1. 遍历hash,逐字符处理;
  2. 将单个字符转换为二进制;
  3. 不满4位则填充;( 2^4 = 16,用2进制表示16进制需要用4位)
  4. 按顺序组合;

完整源码如下:


package api

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
}

该函数只支持16进制形式的HASH值的转换!


转载声明
本文版权归作者所有

如需转载,请注明出处;本文地址: https://www.perfcode.com/p/golang-hash2binary.html