Files
nuknal efd824cc8a aux
2024-05-20 11:08:24 +08:00

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
}