golang标准库binary学习

Tim_SSS · · 3338 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

简介

Package binary implements simple translation between numbers and byte sequences and encoding and decoding of varints.

The varint functions encode and decode single integer values using a variable-length encoding; smaller values require fewer bytes.For a specification, see https://developers.google.com/protocol-buffers/docs/encoding.


翻译:binary 包,简单的实现了数字和byte之间的转化;varints之间的编码和解码。简单说一下,varints是一种使用一个或多个字节表示整型数据的方法。其中数值本身越小,其所占用的字节数越少。


使用

  • 数字和byte相互转化

Numbers are translated by reading and writing fixed-size values.A fixed-size value is either a fixed-size arithmetic type (bool, int8, uint8, int16, float32, complex64, ...)or an array or struct containing only fixed-size values.


翻译:通过读入和写入固定长度的值来转化数字。固定长度的值,既可以是指定长度的值,也可以是指定长度数组,也可以是包含指定长度结构体。数字类型必须申明为,bool, int8, uint8, int16, float32, complex64, ...,具体可以去看源码


package main
import (
"bytes"
"encoding/binary"
"fmt"
)
func main() {
    by := []byte{0x00, 0x00, 0x03, 0xe8}
    var num int32
    bytetoint(by, &num)
    fmt.Println(int(num), num)

    // 测试 int -> byte
    by2 := []byte{}
    var num2 int32
    num2 = 333
    by2 = inttobyte(&num2)
    fmt.Println(by2)

    // 测试 byte -> int
    var num3 int32
    bytetoint(by2,&num3)
    fmt.Println(num3)
}
// byte 转化 int
func bytetoint(by []byte, num *int32)  {
    b_buf := bytes.NewBuffer(by)
    binary.Read(b_buf, binary.BigEndian, num)
}
// 数字 转化 byte
func inttobyte(num *int32) []byte {
    b_buf := new(bytes.Buffer)
    binary.Write(b_buf, binary.BigEndian,num)
    return b_buf.Bytes()
}

本文来自:简书

感谢作者:Tim_SSS

查看原文:golang标准库binary学习

入群交流(和以上内容无关):加入Go大咖交流群,免费领全套学习资料或添加微信:muxilin131420 备注:入群;或加QQ群:729884609

3338 次点击  
加入收藏 微博
被以下专栏收入,发现更多相似内容
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传