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的转换的主要内容,如果未能解决你的问题,请参考以下文章