Eu tenho ABC123EFFF.
Eu quero ter 001010101111000001001000111110111111111111 (ou seja, repr. Binário com, digamos, 42 dígitos e zeros à esquerda).
Quão?
Para resolver o problema do zero à direita do lado esquerdo:
my_hexdata = "1a"
scale = 16 ## equals to hexadecimal
num_of_bits = 8
bin(int(my_hexdata, scale))[2:].zfill(num_of_bits)
Ele dará 00011010 em vez da versão aparada.
len(my_hexdata) * log2(scale)
.Ler
binascii.unhexlify
Retorna os dados binários representados pela string hexadecimal especificada como o parâmetro.
fonte
fonte
Resposta curta:
As novas strings F no Python 3.6 permitem que você faça isso usando uma sintaxe muito concisa:
ou para quebrar isso com a semântica:
Resposta longa:
O que você realmente está dizendo é que tem um valor em uma representação hexadecimal e deseja representar um valor equivalente em binário.
O valor de equivalência é um número inteiro. Mas você pode começar com uma string e, para visualizar em binário, deve terminar com uma string.
Converter hex para binário, 42 dígitos e zeros à esquerda?
Temos várias maneiras diretas de atingir esse objetivo, sem hackear usando fatias.
Primeiro, antes que possamos fazer qualquer manipulação binária, converta para int (presumo que seja em um formato de string, não como um literal):
como alternativa, podemos usar um literal inteiro expresso na forma hexadecimal:
Agora precisamos expressar nosso inteiro em uma representação binária.
Use a função embutida,
format
Em seguida, passe para
format
:Este utiliza da especificação formatação mini-linguagem .
Para quebrar isso, aqui está a forma gramatical disso:
Para tornar isso uma especificação para nossas necessidades, apenas excluímos as coisas de que não precisamos:
e apenas passar para formatar
Formatação de String (Templating) com
str.format
Podemos usar isso em uma string usando o
str.format
método:Ou apenas coloque a especificação diretamente na string original:
Formatação de string com as novas strings f
Vamos demonstrar as novas strings f. Eles usam as mesmas regras de formatação de minilinguagem:
Agora vamos colocar essa funcionalidade em uma função para incentivar a reutilização:
E agora:
a parte, de lado
Se você realmente deseja codificar os dados como uma string de bytes na memória ou no disco, pode usar o
int.to_bytes
método, que só está disponível no Python 3:E como 42 bits divididos por 8 bits por byte equivalem a 6 bytes:
fonte
'0b1010101111000001001000111110111111111111'
fonte
fonte
Esta é uma maneira bastante simples de fazer isso usando o bit fiddling para gerar as strings binárias.
O ponto chave para entender é:
O que gerará 0 ou 1 se o i'ésimo bit de n for definido.
Editar: usando o "novo" operador ternário isto:
Se tornaria:
(TBH, não tenho certeza se isso é legível)
fonte
01111001
11111110
.Este é um pequeno toque na solução de Glen Maynard, que eu acho que é a maneira certa de fazer isso. Ele apenas adiciona o elemento de preenchimento.
Tirou de uma aula. Apenas tire
self,
se você estiver trabalhando em um script autônomo.fonte
Use a função format () integrada e a função int (). É simples e fácil de entender. É uma versão um pouco simplificada da resposta de Aaron
int ()
formato()
Exemplo
Veja também esta resposta
fonte
Substitua cada dígito hexadecimal pelos 4 dígitos binários correspondentes:
fonte
hexadecimal -> decimal e depois decimal -> binário
fonte
Outra maneira:
fonte
Acrescentei o cálculo do número de bits a preencher à solução de Onedinkenedi. Aqui está a função resultante:
Onde 16 é a base da qual você está convertendo (hexadecimal) e 4 é quantos bits você precisa para representar cada dígito, ou log da base 2 da escala.
fonte
fonte
eu tenho uma pequena esperança que ajude :-)
primeiro eu uso sua entrada e enumero para obter cada símbolo. então eu converto para binário e apareço da 3ª posição até o final. O truque para obter o 0 é adicionar o valor máximo da entrada -> neste caso, sempre 16 :-)
a forma abreviada é o método de junção. Aproveitar.
fonte
fonte
A versão binária de ABC123EFFF é na verdade 1010101111000001001000111110111111111111
Para quase todos os aplicativos, você deseja que a versão binária tenha um comprimento múltiplo de 4 com preenchimento inicial de 0s.
Para obter isso em Python:
Exemplo 1:
Exemplo 2:
Observe que isso também funciona no Micropython :)
fonte
Basta usar o código do módulo (nota: eu sou o autor do módulo)
Você pode converter haxedecimal em binário lá.
As palavras-chave de conversão são:
Portanto, você também pode formatar: e. hexadecimal_output = bin_to_hex (a_binary_number)
fonte
HEX_TO_BINARY_CONVERSION_TABLE = {'0': '0000',
fonte
fonte
fonte
fonte