最近工作中遇到的问题,要实现的功能正如题目所说,我要将字符串转换为16进制的[]byte,网上搜了好多的文章,很多的题目都是“[]byte 与 16进制(String) 的相互转换”这种类似的题目,虽然参考以后也解决了问题,但是这也给了很大的误导性,本身16进制的字符串就是个问题,难道我们传入字符串还要传入一个16进制的字符串?而且我要的是[]byte为16进制,不知道为什么要这样起标题,好了,直接进入我们的主题吧
func main() {
// 转换的用的 byte数据
byte_data := []byte(`测试数据`)
// 将 byte 装换为 16进制的字符串
hex_string_data := hex.EncodeToString(byte_data)
// byte 转 16进制 的结果
println(hex_string_data)
/* ====== 分割线 ====== */
// 将 16进制的字符串 转换 byte
hex_data, _ := hex.DecodeString(hex_string_data)
// 将 byte 转换 为字符串 输出结果
println(string(hex_data))
}
看到代码,也就明白了为什么会有这么多的文章会写[]byte 与 16进制(String) 的相互转换。首先我们要将字符串装换为16进制的字符串,然后将16进制的字符串转换成16进制的[]byte
当然我们写了字符串转16进制[]byte,想要整数转16进制[]byte也是同样的道理,唯一需要注意的地方是转换的时候有大小端需要考虑
不过在看别人博客的时候,还真看到有人就是要把16进制的字符串手动转换成字节数组,我们可以参考下:
func Hextob(str string)([]byte){
slen:=len(str)
bHex:=make([]byte,len(str)/2)
ii:=0
for i:=0;i<len(str);i=i+2 {
if slen!=1{
ss:=string(str[i])+string(str[i+1])
bt,_:=strconv.ParseInt(ss,16,32)
bHex[ii]=byte(bt)
ii=ii+1;
slen=slen-2;}
}
return bHex;
}
/*字节数组转16进制可以直接使用 用fmt就能转换*/
func BytetoH(b []byte)(H string){
H=fmt.Sprintf("%x",b)
return;
}
方法逻辑倒是很简单,无非就是每两个字符串转换为一个byte,但前提也是有16进制的字符串,所以这个方法就当帮助我们学习底层实现的例子吧
参考: