加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang -- 网络字节编解码(2)

发布时间:2020-12-16 18:57:10 所属栏目:大数据 来源:网络整理
导读:以下是利用标准库binary来进行编解码 解码 ①使用bytes.NewReader/bytes.Buffer来存储要解码的ascii串 ②使用binary.Read来解码 packagemainimport("bytes""encoding/binary""fmt")funcmain(){varpifloat64bpi:=[]byte{0x18,0x2d,0x44,0x54,0xfb,0x21,0x09,0

以下是利用标准库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进制整数的串?
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读