Tengo ABC123EFFF.
Quiero tener 001010101111000001001000111110111111111111 (es decir, repr. Binaria con, digamos, 42 dígitos y ceros iniciales).
¿Cómo?
Para resolver el problema del cero final del lado izquierdo:
my_hexdata = "1a"
scale = 16 ## equals to hexadecimal
num_of_bits = 8
bin(int(my_hexdata, scale))[2:].zfill(num_of_bits)
Dará 00011010 en lugar de la versión recortada.
len(my_hexdata) * log2(scale)
.Leer
binascii.unhexlify
Devuelve los datos binarios representados por la cadena hexadecimal especificada como parámetro.
fuente
fuente
Respuesta corta:
Las nuevas f-strings en Python 3.6 le permiten hacer esto usando una sintaxis muy concisa:
o romper eso con la semántica:
Respuesta larga:
Lo que en realidad está diciendo es que tiene un valor en una representación hexadecimal y quiere representar un valor equivalente en binario.
El valor de equivalencia es un número entero. Pero puede comenzar con una cadena y, para ver en binario, debe terminar con una cadena.
¿Convertir hexadecimal a binario, 42 dígitos y ceros a la izquierda?
Tenemos varias formas directas de lograr este objetivo, sin hacks que usan rodajas.
Primero, antes de que podamos hacer cualquier manipulación binaria, convierta a int (supongo que esto está en un formato de cadena, no como literal):
alternativamente, podríamos usar un literal entero como se expresa en forma hexadecimal:
Ahora necesitamos expresar nuestro número entero en una representación binaria.
Utilice la función incorporada,
format
Luego pase a
format
:Esto usa el mini-lenguaje de la especificación de formato. .
Para desglosar eso, aquí está la forma gramatical:
Para convertir eso en una especificación para nuestras necesidades, simplemente excluimos las cosas que no necesitamos:
y solo pasa eso para formatear
Formateo de cadenas (plantillas) con
str.format
Podemos usar eso en una cadena usando el
str.format
método:O simplemente coloque la especificación directamente en la cadena original:
Formateo de cadenas con las nuevas cadenas f
Demostremos las nuevas f-strings. Usan las mismas reglas de formato de mini-lenguaje:
Ahora pongamos esta funcionalidad en una función para fomentar la reutilización:
Y ahora:
Aparte
Si realmente solo desea codificar los datos como una cadena de bytes en la memoria o en el disco, puede usar el
int.to_bytes
método, que solo está disponible en Python 3:Y dado que 42 bits divididos por 8 bits por byte equivalen a 6 bytes:
fuente
'0b1010101111000001001000111110111111111111'
fuente
fuente
Aquí hay una forma bastante cruda de hacerlo usando el violín de bits para generar las cadenas binarias.
La clave para entender es:
Lo que generará un 0 o un 1 si se establece el i-ésimo bit de n.
Editar: usando el operador ternario "nuevo" esto:
Se convertiría:
(Qué TBH, no estoy seguro de cuán legible es)
fuente
01111001
11111110
.Este es un pequeño retoque a la solución de Glen Maynard, que creo que es la forma correcta de hacerlo. Simplemente agrega el elemento de relleno.
Lo saqué de una clase. Solo sáquelo
self,
si está trabajando en un script independiente.fuente
Utilice la función integrada format () y la función int () Es simple y fácil de entender. Es una versión un poco simplificada de la respuesta de Aaron
En t()
formato()
Ejemplo
Ver también esta respuesta
fuente
Reemplace cada dígito hexadecimal con los 4 dígitos binarios correspondientes:
fuente
hexadecimal -> decimal luego decimal -> binario
fuente
De otra manera:
fuente
Agregué el cálculo del número de bits a llenar a la solución de Onedinkenedi. Aquí está la función resultante:
Donde 16 es la base desde la que está convirtiendo (hexadecimal) y 4 es la cantidad de bits que necesita para representar cada dígito, o base logarítmica 2 de la escala.
fuente
fuente
tengo una pequeña esperanza cortada que ayuda :-)
primero utilizo su entrada y la enumero para obtener cada símbolo. luego lo convierto a binario y recorto desde la 3ª posición hasta el final. El truco para obtener el 0 es agregar el valor máximo de la entrada -> en este caso siempre 16 :-)
la forma corta es el método de unión. Disfrutar.
fuente
fuente
La versión binaria de ABC123EFFF es en realidad 1010101111000001001000111110111111111111
Para casi todas las aplicaciones, desea que la versión binaria tenga una longitud que sea un múltiplo de 4 con un relleno inicial de 0.
Para obtener esto en Python:
Ejemplo 1:
Ejemplo 2:
Tenga en cuenta que esto también funciona en Micropython :)
fuente
Simplemente use el módulo codificado (nota: soy el autor del módulo)
Puede convertir haxedecimal a binario allí.
Las palabras clave de conversión son:
Entonces también puede formatear: e. salida_hexadecimal = bin_to_hex (un_número_binario)
fuente
HEX_TO_BINARY_CONVERSION_TABLE = {'0': '0000',
fuente
fuente
fuente
fuente