go字符串与16进制[]byte的转换

最近工作中遇到的问题,要实现的功能正如题目所说,我要将字符串转换为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进制的字符串,所以这个方法就当帮助我们学习底层实现的例子吧

 

参考:

https://www.jianshu.com/p/ecda78de1aa0

https://zhuanlan.zhihu.com/p/26808455

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值