is there any way to compress int and decompress it use Go?
For example this number 10 char 4251658154
I want to compress (make size small, for example my 10 char int to 5 char bytes) int or any kind of data type accept number than decompress it
is there any way to compress int and decompress it use Go?
For example this number 10 char 4251658154
I want to compress (make size small, for example my 10 char int to 5 char bytes) int or any kind of data type accept number than decompress it
If you just want to compress arbitrary number at different magniturdes, What you're looking for is varint encoding. If the number is small (<127) it can be encoded in one byte, and so forth. Example from the docs:
package main
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
", buf[:n])
}
}
// Prints:
// 8101
// 7f
// 03
// 01
// 00
// 02
// 04
// 7e
// 8001
If however you want to represent IPV4 addresses in an efficient manner, just encode them as unsigned int32 numbers.
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)
}
}