You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.2 KiB
51 lines
1.2 KiB
package util |
|
|
|
import ( |
|
"bytes" |
|
"encoding/binary" |
|
"fmt" |
|
"strconv" |
|
) |
|
|
|
// Returns found key (int) in provided map by value (string); |
|
// If key does not exist in map - returns -1 |
|
func GetKey(mp map[int]string, givenValue string) int { |
|
for key, value := range mp { |
|
if value == givenValue { |
|
return key |
|
} |
|
} |
|
return -1 |
|
} |
|
|
|
// Decodes given integer bytes into integer |
|
func BytesToInt(gBytes []byte) (int64, error) { |
|
buff := bytes.NewBuffer(gBytes) |
|
integer, err := binary.ReadVarint(buff) |
|
if err != nil { |
|
return 0, fmt.Errorf("could not decode integer: %s", err) |
|
} |
|
buff = nil |
|
return integer, nil |
|
} |
|
|
|
// Decodes given integer bytes into integer, ignores the first bit |
|
// of every given byte in binary form |
|
func BytesToIntIgnoreFirstBit(gBytes []byte) (int64, error) { |
|
// represent each byte in size as binary and get rid from the first bit, |
|
// then concatenate filtered parts |
|
var filteredBits string |
|
for _, b := range gBytes { |
|
// ignore the first bit |
|
filteredPart := fmt.Sprintf("%08b", b)[1:] // byte is 8 bits |
|
filteredBits += filteredPart |
|
} |
|
|
|
// convert filtered binary into usable int64 |
|
integer, err := strconv.ParseInt(filteredBits, 2, 64) |
|
if err != nil { |
|
return -1, err |
|
} |
|
|
|
return integer, nil |
|
}
|
|
|