微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

以下是利用标准库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 举报,一经查实,本站将立刻删除。

相关推荐