import struct


def loadByteCode(path):
    """
        Chargement du bytecode en version binaire.

        Cette fonction charge le bytecode d'un fichier binaire et
        retourne une liste de int représentant le bytecode.

        :example:
        >>> saveByteCode("C:/test.exeb", [0x0200, 0xFFFF])
        >>> loadByteCode("C:/test.exeb")[0:2]
        [512, 65535]
        >>> os.remove("C:/test.exeb")

        :param path: Chemin du fichier.
        :type path: str
        :return: Bytecodes.
        :rtype: int[]

    """
    # On ouvre le fichier et nous écrivons à les données à l'intérieur.
    fichier = open(path, "rb")
    bytecode = []
    try:
        # Nous écrivons les bytes (16 bits) en argument.
        for i in range(0, 0x40FB + 1):
            bytecode.append(int(struct.unpack('>H', fichier.read(2))[0]))
    # Si une erreur survient
    except Exception as e:
        fichier.close()
        raise e
    # On ferme le fichier et on revoie le résultat.
    fichier.close()
    return bytecode