import numpy as np
import struct 

def read_int(fobj):
    return int.from_bytes(fobj.read(4), byteorder='little')

def read_float32(fobj):
    return struct.unpack('<f', fobj.read(4))[0]

def read_float64(fobj):
    return struct.unpack('<d', fobj.read(8))[0]

def read_floats32(fobj, num=1):
    floats = []
    for nfloat in range(num):
        floats += [struct.unpack('<f', fobj.read(4))[0]]
    return np.array(floats)

def read_floats64(fobj, num=1):
    floats = []
    for nfloat in range(num):
        floats += [struct.unpack('<d', fobj.read(8))[0]]
    return np.array(floats)

def read_str(fobj, length):
    return fobj.read(length).decode("utf-8")