Вы можете использовать метод fromhex класса байтов , чтобы преобразовать гекс в байты, затем распакуйте их, как вам угодно:
>>> a='0x0E070907'
>>> h = bytes.fromhex(a[2:])
>>> h
b'\x0e\x07\t\x07'
>>> struct.unpack('<2H', h)
(1806, 1801)
Если вызаранее не знаете количество байтов, вы можете сгенерировать строку формата, соответствующую вашим данным.
>>> a='0x9406920691068F06'
>>> bs = bytes.fromhex(a[2:])
>>> bs
b'\x94\x06\x92\x06\x91\x06\x8f\x06'
>>> len(bs)
8
>>> # Each 'H' is 2 bytes, multiply 'H' by half
>>> # the number of bytes to gt the format string.
>>> fmt = '<' + ('H' * (len(bs)//2))
>>> struct.unpack(fmt, bs)
(1684, 1682, 1681, 1679)
Это будет работать только в том случае, если количество распаковываемых байтов делится равномерно на количество байтовв целевом типе данных.Если это не так - например, если вы читаете поток из сокета, - вам придется накапливать данные, пока у вас не будет подходящего количества.