如何在Go中压缩int(数字)

本森

有什么办法可以使用Go压缩int并将其解压缩?

例如,这个数字10个字符 4251658154

我想压缩(使大小变小,例如将10个char int更改为5个char字节)int或任何类型的数据类型都接受数字,而不要对其进行解压缩

Not_a_Golfer:

如果您只想在不同的Magniturdes处压缩任意数字,那么您正在寻找的是varint编码。如果数字较小(<127),则可以将其编码为一个字节,依此类推。来自文档的示例

包主

import (
    "encoding/binary"
    "fmt"
)

func main() {
    buf := make([]byte, binary.MaxVarintLen64)

    for _, x := range []int64{-65, -64, -2, -1, 0, 1, 2, 63, 64} {
        n := binary.PutVarint(buf, x)
        fmt.Printf("%x\n", buf[:n])
    }
}

// Prints:
// 8101
// 7f
// 03
// 01
// 00
// 02
// 04
// 7e
// 8001

但是,如果您想高效地表示IPV4地址,只需将其编码为无符号的int32数字即可。

import (
    "bytes"
    "encoding/binary"
    "fmt"
    "net"
)

func IPToNumber(addr string) (uint32, error) {
    var n uint32
    err := binary.Read(bytes.NewBuffer(net.ParseIP(addr).To4()), binary.BigEndian, &n)
    return n, err
}

func main() {
    if n, err := IPToNumber("255.255.255.255"); err == nil {
        fmt.Printf("%x", n)
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章