HOWTO · Python
Converter Hex String em Int em Python
Demonstra como converter hexadecimais para inteiros em Python
Nesta página
Use int(value, 16) para converter uma string hexadecimal em um inteiro no Python. Use a base 0 quando quiser que o Python detecte o prefixo 0x, e use int.from_bytes() quando a entrada representar bytes com uma ordem de bytes ou largura com sinal especificadas.
Use int() para converter hexadecimal em inteiro no Python
A função int() aceita uma string e uma base opcional. A base padrão é 10, então passe 16 para texto hexadecimal. Em int(value, base), o segundo argumento indica a base da string de entrada; ele não representa uma largura em bits. Substitua value pelo texto hexadecimal que deseja interpretar.
Converta uma string hexadecimal sem prefixo em inteiro no Python
Para dígitos hexadecimais sem o prefixo 0x ou 0X, passe explicitamente a base 16. Isso é útil para valores lidos de arquivos de texto, APIs ou entradas do usuário.
hex_string = "1a"
integer_value = int(hex_string, 16)
print(integer_value)
26
O resultado é 26: a base 16 faz com que int() interprete cada dígito como hexadecimal. Se a string incluir um prefixo, você pode usar a base 16 ou deixar que int() detecte o prefixo, como mostrado a seguir.
Converta uma string hexadecimal com prefixo em inteiro no Python
Para texto hexadecimal com prefixo, a base 0 indica a int() que deve inferir a base a partir de um prefixo reconhecido, como 0x ou 0X. A base 16 também aceita esses prefixos; a base 0 é útil quando a entrada pode usar outros prefixos de inteiros do Python.
hex_string = "0x1a"
integer_value = int(hex_string, 0)
print(integer_value)
26
Como a string começa com 0x, o Python interpreta os dígitos restantes como hexadecimais e produz 26. A base 0 exige um prefixo reconhecido; ela não interpreta automaticamente texto sem prefixo como hexadecimal. Use a base 16 quando a entrada não tiver prefixo.
Converta uma string hexadecimal em inteiro usando little-endian e big-endian no Python
As ordens de bytes little-endian e big-endian descrevem como os bytes de uma sequência correspondem a um inteiro; o texto hexadecimal, por si só, não tem uma ordem de bytes padrão. Para os bytes ef be, big-endian coloca ef primeiro, enquanto little-endian trata ef como o byte menos significativo. Passe a ordem desejada para int.from_bytes():
data = bytes.fromhex("ef be")
big_value = int.from_bytes(data, byteorder="big")
little_value = int.from_bytes(data, byteorder="little")
print(big_value, little_value)
61374 48879
bytes.fromhex() cria a sequência de dois bytes, e byteorder controla como esses bytes contribuem para o resultado: big-endian produz 61374, enquanto little-endian produz 48879. Assim, a ordem dos bytes fica explícita sem que seja necessário inverter manualmente uma string hexadecimal.
Converta hexadecimal em inteiro com sinal no Python
Uma chamada comum, como int("ffff", 16), retorna um inteiro não negativo. Para interpretar dígitos hexadecimais como um valor com sinal, defina a largura em bytes e decodifique esses bytes com signed=True. Em um valor de 16 bits, ffff representa -1 em complemento de dois:
hex_string = "ffff"
data = bytes.fromhex(hex_string)
signed_value = int.from_bytes(data, byteorder="big", signed=True)
print(signed_value)
-1
bytes.fromhex("ffff") fornece dois bytes; portanto, essa conversão com sinal tem largura de 16 bits e retorna -1. O bit mais significativo está definido, e o complemento de dois determina o valor com sinal. Escolha a ordem dos bytes e a largura de acordo com o formato dos dados que está decodificando; int() não infere nenhum dos dois.