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

Posted 爆米花9958

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于go字符串与16进制[]byte的转换的主要内容,如果未能解决你的问题,请参考以下文章

byte[]数组与16进制字符串的相互转换

Java中byte与16进制字符串的互相转换

Java中byte与16进制字符串的互相转换

Java中byte与16进制字符串的互相转换

Java中byte与16进制字符串的互相转换

Golang中的[]byte与16进制(String)之间相互转换