Converter Hex em Byte em Python
- Inicializar um Valor Hexadecimal
- Use a Função “bytes.fromhex()” para Converter Hex em Byte em Python
- Use o Módulo “binascii” para Converter Hex em Byte em Python
-
Use o Método
codecs.decode()
para Converter um Hex em Byte no Python -
Utilize a Compreensão de Lista e a Função
int()
para Converter um Hexadecimal em Byte em Python - Conclusão
Hexadecimal, abreviado para hex, usa 16 símbolos (0-9, a-f) para representar valores, contrastando com os 10 símbolos do decimal. Por exemplo, 1000 em decimal é 3E8 em hex.
A habilidade em lidar com hex é crucial para tarefas de programação envolvendo dados binários, endereços de memória e codificação de baixo nível. Este tutorial apresentará como converter valores hexadecimais em um literal de byte em Python.
Inicializar um Valor Hexadecimal
Vamos criar um valor hexadecimal usando uma string e converter a frase “A quick brown fox” em um valor hex usando a função “hexlify()” no módulo “binascii”.
Para converter uma string em hexadecimal, primeiro precisamos convertê-la em bytes.
import binascii
str_val = "A quick brown fox".encode("utf-8")
hex_val = binascii.hexlify(str_val).decode("utf-8")
print(hex_val)
Saída:
4120717569636b2062726f776e20666f78
Agora, convertemos com sucesso uma string em hexadecimal. Em seguida, vamos converter hexadecimal de volta em bytes.
Use a Função “bytes.fromhex()” para Converter Hex em Byte em Python
O método “bytes.fromhex()” é projetado para converter uma string hexadecimal válida em um objeto “bytes”. Ele possui a seguinte sintaxe:
bytes.fromhex(hex_string)
- “hex_string”: Este é um argumento obrigatório e representa a string hexadecimal de entrada que você deseja converter em um literal de byte.
Veja como o método “bytes.fromhex()” funciona:
- Validação de Entrada: O método primeiro valida a entrada “hex_string” para garantir que ela contenha apenas caracteres hexadecimais válidos (dígitos 0-9 e letras minúsculas ou maiúsculas A-F). Se a string contiver outros caracteres, será gerado um “ValueError”.
- Processamento em Pares: O método processa a string hexadecimal dois caracteres de cada vez, tratando cada par de caracteres como um único byte hexadecimal. Isso significa que para cada dois caracteres na string de entrada, um byte é gerado no objeto “bytes” resultante.
- Conversão em Bytes: Cada par de caracteres hexadecimais é convertido em seu equivalente binário.
- Construção do Objeto “bytes”: À medida que o método processa os pares de caracteres hexadecimais, ele constrói um objeto “bytes” anexando a representação binária de cada byte. Esse processo continua até que toda a string de entrada tenha sido processada.
- Valor de Retorno: Uma vez que toda a string de entrada tenha sido processada, o método retorna o objeto “bytes” resultante, que representa o literal de byte equivalente à string hexadecimal de entrada.
Como exemplo, vamos pegar o valor hex do resultado anterior e usar “fromhex()” para convertê-lo em um literal de byte.
hex_val = "4120717569636b2062726f776e20666f78"
print(bytes.fromhex(hex_val))
Saída:
b'A quick brown fox'
Vamos analisar a string hexadecimal de exemplo “4120717569636b2062726f776e20666f78” para entender melhor como ela é convertida em um literal de byte:
- “41” se torna o byte 65 (valor ASCII de ‘A’).
- “20” se torna o byte 32 (valor ASCII do espaço).
- “71” se torna o byte 113 (valor ASCII de ‘q’).
- “75” se torna o byte 117 (valor ASCII de ‘u’).
- “69” se torna o byte 105 (valor ASCII de ‘i’).
- “63” se torna o byte 99 (valor ASCII de ‘c’).
- “6b” se torna o byte 107 (valor ASCII de ‘k’).
- “20” se torna o byte 32 (valor ASCII do espaço).
- “62” se torna o byte 98 (valor ASCII de ‘b’).
- “72” se torna o byte 114 (valor ASCII de ‘r’).
- “6f” se torna o byte 111 (valor ASCII de ‘o’).
- “77” se torna o byte 119 (valor ASCII de ‘w’).
- “6e” se torna o byte 110 (valor ASCII de ’n’).
- “20” se torna o byte 32 (valor ASCII do espaço).
- “66” se torna o byte 102 (valor ASCII de ‘f’).
- “6f” se torna o byte 111 (valor ASCII de ‘o’).
- “78” se torna o byte 120 (valor ASCII de ‘x’).
Quando todos esses bytes são combinados, você obtém o literal de byte “A quick brown fox”, que é o resultado final.
Use o Módulo “binascii” para Converter Hex em Byte em Python
O módulo Python “binascii” contém funções utilitárias eficientes para operações binárias e ASCII. Em particular, “unhexlify()” é uma função dentro do módulo “binascii” que converte um valor hexadecimal em um literal de byte.
Esta função possui a seguinte sintaxe:
binascii.unhexlify(hex_string)
- “hex_string”: Este é o argumento obrigatório que representa a string hexadecimal de entrada que você deseja converter em um literal de byte.
Veja uma explicação detalhada de como funciona:
- Validação de Entrada: O método começa validando o argumento “hex_string” para garantir que contenha apenas caracteres hexadecimais válidos. Quaisquer caracteres inválidos na string de entrada resultarão em uma exceção “binascii.Error”.
- Conversão de Pares Hexadecimais: Em seguida, o método processa a “hex_string” em pares de caracteres. Por exemplo, “41” representa o byte com o valor inteiro 65 (valor ASCII de ‘A’).
- Conversão em Bytes: Os pares de bytes hexadecimais são convertidos em sua representação binária. Cada par é transformado em um byte correspondente, sendo que cada caractere representa 4 bits.
- Construção do Literal de Byte: Enquanto o método processa cada par, ele adiciona os bytes binários resultantes para formar um literal de byte completo. Esse processo continua até que toda a string de entrada tenha sido processada.
- Valor de Retorno: Assim que toda a
hex_string
tenha sido processada, a funçãounhexlify()
retorna o literal de byte resultante, representado como um objetobytes
.
Vamos inicializar um novo exemplo com caracteres especiais não ASCII, que serão convertidos em um valor hexadecimal. O exemplo será a tradução grega da frase A quick brown fox
.
import binascii
from binascii import unhexlify
str_val = "Μια γρήγορη καφέ αλεπού".encode(
"utf-8"
) # A quick brown fox in Greek translation
hex_val = binascii.hexlify(str_val).decode("utf-8")
print("String value: ", str_val.decode("utf-8"))
print("Hexadecimal: ", hex_val)
print("Byte value: ", unhexlify(hex_val))
Saída:
String value: Μια γρήγορη καφέ αλεπού
Hexadecimal: ce9cceb9ceb120ceb3cf81ceaeceb3cebfcf81ceb720cebaceb1cf86cead20ceb1cebbceb5cf80cebfcf8d
Byte value: b'\xce\x9c\xce\xb9\xce\xb1 \xce\xb3\xcf\x81\xce\xae\xce\xb3\xce\xbf\xcf\x81\xce\xb7 \xce\xba\xce\xb1\xcf\x86\xce\xad \xce\xb1\xce\xbb\xce\xb5\xcf\x80\xce\xbf\xcf\x8d'
Agora conseguimos converter com sucesso valores hexadecimais em bytes.
Use o Método codecs.decode()
para Converter um Hex em Byte no Python
A função codecs.decode()
também pode ser usada para converter uma string hexadecimal em bytes. Ela faz parte do módulo codecs
do Python, que fornece várias funcionalidades de codificação e decodificação para diferentes representações de dados.
Ela possui a seguinte sintaxe:
codecs.decode(data, encoding, errors="strict")
data
: Este é o argumento obrigatório que representa os dados que você deseja decodificar. Neste caso, deve ser a string hexadecimal que você deseja converter em um literal de byte.encoding
: Este também é um argumento obrigatório que especifica a codificação a ser usada para a decodificação. Ao trabalhar com strings hexadecimais, você deve usar a codificaçãohex
para indicar que a string de entrada representa um valor hexadecimal.errors
(opcional): Este argumento especifica como lidar com erros de decodificação, como quando a string de entrada contém caracteres inválidos para a codificação especificada. Ele tem um valor padrão destrict
, mas você pode alterá-lo paraignore
oureplace
para lidar com erros de forma diferente.
Aqui está uma explicação detalhada de como esse método funciona ao ser usado para decodificar valores hexadecimais:
- Validação de Entrada: O método primeiro verifica a validade do argumento
data
para garantir que ele contenha apenas caracteres hexadecimais válidos. Se a string de entrada contiver caracteres não hexadecimais, ele lançará um erro deUnicodeDecodeError
com detalhes sobre o caractere problemático. - Processo de Decodificação: A função
codecs.decode()
interpreta o argumentodata
como uma string hexadecimal e a converte em dados binários. Ela processa a string de entrada em pares de caracteres, tratando cada par como um único byte hexadecimal. - Especificação de Codificação: O argumento
encoding
é crucial nesse contexto. Quando você especifica'hex'
como a codificação, ele indica ao Python que interprete a string de entrada como um valor hexadecimal e o converta de acordo. - Conversão em Bytes: À medida que o método processa cada par de caracteres hexadecimais, ele os converte em sua representação binária. Essa transformação resulta na criação de um literal de byte, onde cada par de caracteres corresponde a um único byte.
- Valor de Retorno: O método
codecs.decode()
retorna o literal de byte resultante como um objetobytes
, representando os dados binários decodificados.
Veja o exemplo abaixo:
import codecs
hex_val = "4120717569636b2062726f776e20666f78"
byte_val = codecs.decode(hex_val, "hex")
print(byte_val)
Este programa decodifica a string hex_val
usando a função codecs.decode()
com o argumento de codificação configurado como 'hex'
. Isso significa que ele vai interpretar a string de entrada como um valor hexadecimal e convertê-lo em bytes.
Saída:
b'A quick brown fox'
Utilize a Compreensão de Lista e a Função int()
para Converter um Hexadecimal em Byte em Python
Este método envolve o uso da compreensão de lista e da função int()
para converter uma string hexadecimal em bytes.
hex_val = "4120717569636b2062726f776e20666f78"
byte_val = bytes([int(hex_val[i : i + 2], 16) for i in range(0, len(hex_val), 2)])
print(byte_val)
Aqui, o código utiliza uma compreensão de lista para iterar sobre a string hexadecimal em pares de dois caracteres, converte cada par em um número inteiro na base 16 (hexadecimal) e cria uma lista desses inteiros.
O construtor bytes()
é então usado para converter esta lista de inteiros em um objeto bytes.
Saída:
b'A quick brown fox'
Este método é especialmente útil quando temos uma string hexadecimal com uma estrutura conhecida e queremos convertê-la eficientemente em bytes. Ele fornece controle sobre o processo de conversão, permitindo-nos especificar a base de codificação (neste caso, base 16 para hexadecimal).
Conclusão
Neste artigo, abordamos algumas maneiras de converter valores hexadecimais em literais de bytes em Python.
A função fromhex()
é preferível se você não deseja importações adicionais em seu código-fonte. Caso contrário, você pode escolher o método que melhor se adequa às suas necessidades e estilo de programação.
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 Bytes
- Como Converter Bytes para Integers em Python 2.7 e 3.x
- Como Converter Int em Bytes em Python 2 e Python 3
- Converter Int para Binário em Python
- Como Converter Bytes em Strings em Python 2 e Python 3
- Como Converter strings em Bytes em Python
- B na frente da string em Python