This commit is contained in:
nuknal
2024-05-20 11:08:24 +08:00
parent f609b2b023
commit efd824cc8a
14 changed files with 332 additions and 69 deletions

51
extract/util.go Normal file
View File

@@ -0,0 +1,51 @@
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
}