⬥ ID3 encoding/decoding library in Go ⬥
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.

52 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
}