tp/tools/converters/binary_funcs.py

62 lines
1.6 KiB
Python

import os
import struct
from typing import BinaryIO
def skip_bytes(binary_file:BinaryIO, byte_count:int) -> None:
binary_file.seek(byte_count, os.SEEK_CUR)
def read_s8(binary_file: BinaryIO)-> int:
chunk = binary_file.read(1)
if len(chunk) < 1:
raise EOFError()
return struct.unpack(">b", chunk)[0]
def read_s16(binary_file: BinaryIO) -> int:
chunk = binary_file.read(2)
if len(chunk) < 2:
raise EOFError()
return struct.unpack(">h", chunk)[0]
def read_s32(binary_file: BinaryIO) -> int:
chunk = binary_file.read(4)
if len(chunk) < 4:
raise EOFError()
return struct.unpack(">i", chunk)[0]
def read_u8(binary_file: BinaryIO) -> int:
chunk = binary_file.read(1)
if len(chunk) < 1:
raise EOFError()
return struct.unpack(">B", chunk)[0]
def read_u16(binary_file: BinaryIO) -> int:
chunk = binary_file.read(2)
if len(chunk) < 2:
raise EOFError()
return struct.unpack(">H", chunk)[0]
def read_u32(binary_file: BinaryIO) -> int:
chunk = binary_file.read(4)
if len(chunk) < 4:
raise EOFError()
return struct.unpack(">I", chunk)[0]
def read_f32(binary_file: BinaryIO) -> int:
chunk = binary_file.read(4)
if len(chunk) < 4:
raise EOFError()
return struct.unpack(">f", chunk)[0]
def read_bytes_until_null(binary_file: BinaryIO) -> bytes:
begin = binary_file.tell()
while True:
b = binary_file.read(1)
if len(b) == 0:
raise EOFError()
if b[0] == 0:
break
str_length = binary_file.tell() - begin - 1
binary_file.seek(begin)
return binary_file.read(str_length)