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

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

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

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

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

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

完整源码:

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
}

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/golang-hash2binary.html

分类:
推荐阅读: