52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package extract
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/binary"
|
|
)
|
|
|
|
// int32ToBigEndian converts an int32 to a big-endian byte array.
|
|
func int32ToBigEndian(num int32) ([]byte, error) {
|
|
buf := new(bytes.Buffer)
|
|
err := binary.Write(buf, binary.BigEndian, num)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return buf.Bytes(), nil
|
|
}
|
|
|
|
// bigEndianToInt32 converts a big-endian byte array to an int32.
|
|
func bigEndianToInt32(data []byte) int32 {
|
|
var num int32
|
|
buf := bytes.NewReader(data)
|
|
err := binary.Read(buf, binary.BigEndian, &num)
|
|
if err != nil {
|
|
return 0
|
|
}
|
|
return num
|
|
}
|
|
|
|
// bigEndianToInt24 converts a big-endian 3-byte array to an int32 (simulating int24).
|
|
func bigEndianToInt24(data []byte) int32 {
|
|
if len(data) != 3 {
|
|
return 0
|
|
}
|
|
num := int32(data[0])<<16 | int32(data[1])<<8 | int32(data[2])
|
|
// Adjust for negative values
|
|
if num&0x800000 != 0 {
|
|
num |= ^0xFFFFFF
|
|
}
|
|
return num
|
|
}
|
|
|
|
// bigEndianToInt16 converts a big-endian byte array to an int16.
|
|
func bigEndianToInt16(data []byte) int16 {
|
|
var num int16
|
|
buf := bytes.NewReader(data)
|
|
err := binary.Read(buf, binary.BigEndian, &num)
|
|
if err != nil {
|
|
return 0
|
|
}
|
|
return num
|
|
}
|