如何仅用4位来表示Go中的数字?

时间:2019-03-28 23:09:21

标签: go quantization

我正在尝试将数字的表示压缩为更少的位数。例如,现在我正在使用float64来表示诸如8.0之类的数字。我只需要4位来表示8.0,所以我试图找到一种方法将float64表示转换为4位表示。我知道我可以使用uint8仅用8位来表示8,但这对于我的应用程序来说还不够。我需要压缩那些多余的空间。

我环顾了Go标准库,但是没有发现任何可以使我用不到8位表示数字的东西。我错过了一个可以帮助我做到这一点的包裹吗?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

Go标准库确实有一个可变长度数字的示例。

package main

import (
    "encoding/binary"
    "fmt"
)

func main() {
    buf := make([]byte, binary.MaxVarintLen64)
    x := int64(8)
    n := binary.PutVarint(buf[:cap(buf)], x)
    buf = buf[:n]
    fmt.Println(x, len(buf), buf)
    y, m := binary.Varint(buf)
    fmt.Println(y, m)
}

游乐场:https://play.golang.org/p/-p6M6OSHcMF

输出:

8 1 [16]
8 1