Supondo que você tenha uma sequência de bytes assim
"\ x12 \ x45 \ x00 \ xAB"
e você sabe a quantidade de bytes e seu tipo, você também pode usar essa abordagem
import struct
bytes = '\x12\x45\x00\xAB'
val = struct.unpack('<BBH', bytes)
#val = (18, 69, 43776)
Como especifiquei little endian (usando o caractere '<') no início da string de formato, a função retornou o equivalente decimal.
0x12 = 18
0x45 = 69
0xAB00 = 43776
B é igual a um byte (8 bits) não assinado
H é igual a dois bytes (16 bits) não assinado
Mais caracteres disponíveis e tamanhos de bytes podem ser encontrados aqui
As vantagens são ..
Você pode especificar mais de um byte e o endian dos valores
Desvantagens ..
Você realmente precisa saber o tipo e o comprimento dos dados com os quais está lidando