以下是利用标准库binary来进行编解码
解码
①使用bytes.NewReader/bytes.Buffer来存储要解码的ascii串
②使用binary.Read来解码
packagemain import( "bytes" "encoding/binary" "fmt" ) funcmain(){ varpifloat64 bpi:=[]byte{0x18,0x2d,0x44,0x54,0xfb,0x21,0x09,0x40} buf:=bytes.NewReader(bpi) err:=binary.Read(buf,binary.LittleEndian,&pi) //这里可以继续读出来存在变量里,这样就可以解码出来很多,读的次序和变量类型要对 //binary.Read(buf,binary.LittlEndian,&v2) iferr!=nil{ fmt.Println("binary.ReadFailed:",err) } fmt.Print(pi) //3.141592653589793 }
编码
①使用bytes.Buffer来存储编码生成的串
②使用binary.Write来编码存储在①的buf中
packagemain import( "bytes" "encoding/binary" "fmt" ) funcmain(){ varpifloat64=3.141592653589793 buf:=new(bytes.Buffer) err:=binary.Write(buf,pi) //这里可以继续往buf里写,都存在buf里 //binary.Write(buf,uint16(12345)) iferr!=nil{ fmt.Println("binary.ReadFailed:",err) } fmt.Print(buf.Bytes()) //[2445688425133964] }
Multi模式
解码
ing
编码
packagemain import( "bytes" "encoding/binary" "fmt" ) funcmain(){ buf:=new(bytes.Buffer) vardata=[]interface{}{ uint16(61374),int8(-54),uint8(254),} for_,v:=rangedata{ err:=binary.Write(buf,v) iferr!=nil{ fmt.Println("binary.WriteFailed:",err) } } fmt.Printf("%x",buf.Bytes()) //beefcafe这个是16进制串 //这里转换为了16进制整数的串? }
原文地址:https://www.jb51.cc/go/191161.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。