Si bien en realidad no importa, una cadena binaria generalmente significa una cadena que contiene datos binarios reales (un byte contiene dos dígitos hexadecimales, es decir, "\ x00" es un byte nulo).
trevorKirkby
Respuestas:
563
Utiliza la intfunción incorporada y pasa la base del número de entrada, es decir, 2para un número binario:
En caso de que alguien busque lo contrario: bin(255)-> '0b11111111'. Vea esta respuesta para detalles adicionales.
Akseli Palén
77
Cabe señalar que esto solo funciona para enteros binarios sin signo. Para enteros con signo, las opciones de conversión son un desastre.
Nombre falso el
2
¿Cómo hacer esto en Python 3?
Saras Arya
2
@SarasArya ¡Es muy similar! :) He actualizado, ver arriba.
relajarse
1
Y tenga en cuenta que en una sesión interactiva REPL (como lo sugiere la >>>solicitud), no necesita usar printnada. El ejemplo hipotético del OP no lo hizo. Así que realmente debería ser idéntico en Python 2 y 3.
John Y
37
Simplemente escriba 0b11111111 en la interfaz interactiva de Python:
Otra forma de hacerlo es utilizando el bitstringmódulo:
>>>from bitstring importBitArray>>> b =BitArray(bin='11111111')>>> b.uint
255
Tenga en cuenta que el entero sin signo es diferente del entero con signo:
>>> b.int
-1
El bitstringmódulo no es un requisito, pero tiene muchos métodos eficaces para convertir la entrada en bits y desde otros en otras formas, así como para manipularlos.
Usar int con base es el camino correcto. Solía hacer esto antes de encontrar que int también toma base. Básicamente es una reducción aplicada en una comprensión de la lista de la forma primitiva de convertir binario a decimal (por ejemplo, 110 = 2 ** 0 * 0 + 2 ** 1 * 1 + 2 ** 2 * 1)
add =lambda x,y : x + y
reduce(add,[int(x)*2** y for x, y in zip(list(binstr), range(len(binstr)-1,-1,-1))])
Presta atención a 2 datos separados por dos puntos.
De esta manera, puede convertir entre {binario, octal, hexadecimal, decimal} a {binario, octal, hexadecimal, decimal} cambiando el lado derecho del colon [:]
:#b -> converts to binary
:#o -> converts to octal
:#x -> converts to hexadecimal
:#0-> converts to decimal as above example
Intente cambiar el lado izquierdo del colon para tener octal / hexadecimal / decimal.
Para una matriz grande (10 ** 5 filas y más) es mejor usar un matmult vectorizado. Pase en todas las filas y cols de una sola vez. Es extremadamente rapido. No hay bucles en Python aquí. Originalmente lo diseñé para convertir muchas columnas binarias como 0/1 para 10 columnas de género diferentes en MovieLens en un solo entero para cada fila de ejemplo.
defBitsToIntAFast(bits):
m,n = bits.shape
a =2**np.arange(n)[::-1]# -1 reverses array of powers of 2 of same length as bitsreturn bits @ a
Respuestas:
Utiliza la
int
función incorporada y pasa la base del número de entrada, es decir,2
para un número binario:Aquí hay documentación para python2 y para python3 .
fuente
bin(255)
->'0b11111111'
. Vea esta respuesta para detalles adicionales.>>>
solicitud), no necesita usarprint
nada. El ejemplo hipotético del OP no lo hizo. Así que realmente debería ser idéntico en Python 2 y 3.Simplemente escriba 0b11111111 en la interfaz interactiva de Python:
fuente
Otra forma de hacerlo es utilizando el
bitstring
módulo:Tenga en cuenta que el entero sin signo es diferente del entero con signo:
El
bitstring
módulo no es un requisito, pero tiene muchos métodos eficaces para convertir la entrada en bits y desde otros en otras formas, así como para manipularlos.fuente
Usar int con base es el camino correcto. Solía hacer esto antes de encontrar que int también toma base. Básicamente es una reducción aplicada en una comprensión de la lista de la forma primitiva de convertir binario a decimal (por ejemplo, 110 = 2 ** 0 * 0 + 2 ** 1 * 1 + 2 ** 2 * 1)
fuente
add = lambda x, y: x + y
,int.__add__
se puede proporcionar para reducir. Por ejemploreduce(int.__add__, ...)
fuente
Una implementación recursiva de Python:
fuente
Binario a decimal:
binario a hexa octal y etc.
Presta atención a 2 datos separados por dos puntos.
De esta manera, puede convertir entre {binario, octal, hexadecimal, decimal} a {binario, octal, hexadecimal, decimal} cambiando el lado derecho del colon [:]
Intente cambiar el lado izquierdo del colon para tener octal / hexadecimal / decimal.
fuente
Para una matriz grande (10 ** 5 filas y más) es mejor usar un matmult vectorizado. Pase en todas las filas y cols de una sola vez. Es extremadamente rapido. No hay bucles en Python aquí. Originalmente lo diseñé para convertir muchas columnas binarias como 0/1 para 10 columnas de género diferentes en MovieLens en un solo entero para cada fila de ejemplo.
fuente