Converter Hex String em Int em Python
-
Utilize
int()
para Converter Hex para Int em Python - Converter Hex String Não Prefixado em Int em Python
- Conversão de Hex String Prefixado em Int em Python
- Converter string hexadecimal de Little e Big Endian em Int em Python
- Converter o Hex para Inteiro Assinado em Python
Este tutorial demonstrará como converter a string hexadecimal para int
em Python. Cobrirá diferentes formatos hexadecimais como assinado, pequeno, e big-endian, 0x
hexadecimal anotado, e a string hexadecimal padrão.
Utilize int()
para Converter Hex para Int em Python
A forma mais comum e eficaz de converter o hexágono num número inteiro em Python é utilizar a função de tipografia int()
.
Esta função aceita dois argumentos: um argumento obrigatório, que é o valor a ser convertido, e um segundo argumento opcional, que é a base do formato do número com o padrão como 10
.
Outros formatos de números são 2
para binário, 8
para octal, e 16
para hexadecimal. Se colocar 0
como argumento para o valor base, obterá o formato do número a partir do prefixo do valor. Se não houver nenhum prefixo, reconhecê-lo-á automaticamente como decimal, 0b
para binário, 0o
para octal, e 0x
para hexadecimal.
Converter Hex String Não Prefixado em Int em Python
Se a string hexadecimal não for prefixada, então especificar o valor base da função int()
a ser 16.
Por exemplo:
hex_val = "beef101"
print(int(hex_val, 16))
Resultado:
200208641
O resultado é a conversão decimal ou inteira do valor hexadecimal beef101
.
Conversão de Hex String Prefixado em Int em Python
Se a string hexagonal tiver um prefixo 0x
, então altere o argumento do valor base para 0
para detectar automaticamente o prefixo.
Ainda pode passar 16
como base, mas se estiver a lidar com múltiplos valores com diferentes formatos de números, passar 0
é a melhor abordagem.
hex_val = "0xdeadcab"
print(int(hex_val, 0))
print(int(hex_val, 16))
Resultado:
233495723
233495723
Converter string hexadecimal de Little e Big Endian em Int em Python
(https://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/) são dois tipos de sistemas de encomenda de hexadecimal. A ordem padrão é little-endian, o que coloca o número mais significativo na parte mais à direita da sequência, enquanto o big-endian faz o oposto.
Com isto em mente, tudo o que temos de considerar é converter o valor hexadecimal do big-endian em little-endian. Posteriormente, a conversão habitual pode agora ser efectuada sobre ele.
Para converter uma string hexadecimal big-endiana em hexadecimal little-endian, utilizar bytearray.fromhex()
e utilizar a função reverse()
sobre o resultado. Depois, converta o valor hexadecimal de volta para string e converta-o para um número inteiro.
big_endian = "efbe"
def to_little(val):
little_hex = bytearray.fromhex(val)
little_hex.reverse()
print("Byte array format:", little_hex)
str_little = "".join(format(x, "02x") for x in little_hex)
return str_little
little_endian = to_little(big_endian)
print("Little endian hex:", little_endian)
print("Hex to int:", int(little_endian, 16))
Para resumir este bloco de código:
- Chamar
bytearray.fromhex()
para converter a string hexadecimal big-endian em um valor hexadecimal de array de bytes. - Inverter a matriz de bytes para converter o big-endian para um formato little-endian.
- Converter o valor do array de bytes de volta para um formato de string hexadecimal em formato little-endian.
- Converter a string num número inteiro utilizando
int()
.
Resultado:
Byte array format: bytearray(b'\xbe\xef')
Little endian hex: beef
Hex to int: 48879
Converter o Hex para Inteiro Assinado em Python
A conversão de qualquer formato numérico num inteiro assinado necessitaria de uma operação chamada Complemento de Dois, que é uma operação matemática um pouco mais abrangente para calcular para números assinados.
Assim, antes de podermos converter o hexadecimal num inteiro assinado, precisaríamos de definir uma função que realizasse a operação do Complemento de Dois.
def twosComplement_hex(hexval):
bits = 16 # Number of bits in a hexadecimal number format
val = int(hexval, bits)
if val & (1 << (bits - 1)):
val -= 1 << bits
return val
O bit mais à esquerda num valor binário é chamado bit assinado, determinando se o inteiro é positivo ou negativo. Esta função irá reservar esse bit como bit assinado e deslocar os outros bits para compensar utilizando o operador de deslocamento à esquerda do bit <<
.
Agora, passando à conversão real do valor hexadecimal para int. assinado.
hex_val1 = "ff"
hex_val2 = "ffff"
hex_val3 = "aaff"
def twosComplement_hex(hexval):
bits = 16
val = int(hexval, bits)
if val & (1 << (bits - 1)):
val -= 1 << bits
return val
print(twosComplement_hex(hex_val1))
print(twosComplement_hex(hex_val2))
print(twosComplement_hex(hex_val3))
Resultado:
255
-1
-21761
Agora, conseguimos converter uma string hexadecimais num inteiro assinado.
Em resumo, cobrimos a conversão de diferentes tipos de formatos hexadecimais em números inteiros assinados e não assinados. Utilize int()
com o valor e argumentos de base para converter um hexadecimal em um inteiro não assinado.
Se o hexadecimal estiver num formato big-endian, converta-o num formato little-endian utilizando primeiro bytearray.fromhex()
e reverse()
.
Por último, se precisar de converter uma string hexadecimal para um inteiro assinado, então execute a operação Complementar de Dois sobre o valor hexadecimal nele para obter um valor inteiro assinado.
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedInArtigo relacionado - Python Hex
- Converter HEX em RGB em Python
- Converter Hex em ASCII em Python
- Converter hexadecimal em decimal em Python
- String para Hex em Python
- Converter Byte em Hex em Python
- Converter Hex em Byte em Python