任意类型和字节切片转换

任意类型转换字节切片 (任意类型需是指明的占位大小 例如:int8 int16 float32……例如int不可以)

func AnyToHex(any interface{}) []byte {
    buff := new(bytes.Buffer)
    //数据写入buff
    err := binary.Write(buff, binary.BigEndian, any)
    if err != nil {
        log.Panic(err)
    }
    return buff.Bytes()
}

例如:
整数转换为字节切片
思路:
1.开辟一个字节集缓存区
2.把整数写入到缓存区中
3.将缓存区转换为字节切片
注意:
1.方法binary.Write(io.Writer, ByteOrder, interface{})
2.bytes.Buffer实现了io.Writer接口(接收器)。写意味着别的数据写入自身(读则意味着自身数据放入其他地方)
3.ByteOrder字节顺序
4.interface{}任何类型都实现了空接口

func IntToHex(num64 int64) []byte {
    buff := new(bytes.Buffer)

    err := binary.Write(buff, binary.BigEndian, num64)
    if err != nil {
        log.Panic(err)
    }
    return buff.Bytes()
}

字节切片转换为整型

func HexToInt(data []byte) int64 {
    //先将字节切片放在Reader中
    //buffer实现了reader,但也直接可以用reader buff := bytes.NewReader(data)
    //bytes.NewReader(data)源码返回了return &Reader{data, 0, -1}
    //而Write(data)源码使用了copy,开辟新空间
    buff := new(bytes.Buffer)
    buff.Write(data)
    var numtemp int64
    //numtemp记得要传指针
    err := binary.Read(buff, binary.BigEndian, &numtemp)

    if err != nil {
        log.Panic(err)
    }
    return  numtemp
}

猜你喜欢

转载自blog.csdn.net/weixin_42506905/article/details/81359448