⬥ 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.

51 lines
1.2 KiB

package util
import (
"fmt"
"strconv"
"strings"
)
// Decodes given byte into integer
func ByteToInt(gByte byte) (int, error) {
integer, err := strconv.Atoi(fmt.Sprintf("%d", gByte))
if err != nil {
return 0, err
}
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
}
// Converts given bytes into string, ignoring the first 31 non-printable ASCII characters.
// (LOSSY, if given bytes contain some nasty ones)
func ToString(gBytes []byte) string {
var filteredBytes []byte
for _, b := range gBytes {
if b <= 31 {
continue
}
filteredBytes = append(filteredBytes, b)
}
return strings.ToValidUTF8(string(filteredBytes), "")
}