有什么办法可以使用Go压缩int并将其解压缩?
例如,这个数字10个字符 4251658154
我想压缩(使大小变小,例如将10个char int更改为5个char字节)int或任何类型的数据类型都接受数字,而不要对其进行解压缩
如果您只想在不同的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] 删除。
我来说两句