Embora isso realmente não importe, uma string binária normalmente significa uma string que contém dados binários reais (um byte contém dois dígitos hexadecimais, ou seja, "\ x00" é um byte nulo).
trevorKirkby
Respostas:
563
Você usa a intfunção embutida e passa a ela a base do número de entrada, ou seja, 2para um número binário:
Caso alguém esteja procurando o oposto: bin(255)-> '0b11111111'. Veja esta resposta para detalhes adicionais.
Akseli Palén 13/03/2013
7
Note-se que isso funciona apenas para números inteiros binários não assinados. Para números inteiros assinados, as opções de conversão são uma bagunça.
Fake Name
2
Como fazer isso em python 3?
Saras Arya
2
@SarasArya É muito parecido! :) Eu atualizei, veja acima.
descontraia
1
E observe que, em uma sessão REPL interativa (como sugerido pelo >>>prompt), você não precisa usar printnada. O exemplo hipotético do OP não. Então, ele realmente deve ser idêntica em Python 2 e 3.
John Y
37
Basta digitar 0b11111111 na interface interativa python:
Outra maneira de fazer isso é usando o bitstringmódulo:
>>>from bitstring importBitArray>>> b =BitArray(bin='11111111')>>> b.uint
255
Observe que o número inteiro não assinado é diferente do número inteiro assinado:
>>> b.int
-1
O bitstringmódulo não é um requisito, mas possui muitos métodos de desempenho para transformar a entrada em e de bits em outras formas, além de manipulá-los.
Usar int com base é o caminho certo a seguir. Eu costumava fazer isso antes de encontrar o int também se baseia. É basicamente uma redução aplicada em uma lista de compreensão da maneira primitiva de converter binário em decimal (por exemplo, 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))])
Preste atenção a 2 informações separadas por dois pontos.
Dessa maneira, você pode converter entre {binário, octal, hexadecimal, decimal} em {binário, octal, hexadecimal, decimal} alterando o lado direito dos dois pontos [:]
:#b -> converts to binary
:#o -> converts to octal
:#x -> converts to hexadecimal
:#0-> converts to decimal as above example
Tente alterar o lado esquerdo do cólon para ter octal / hexadecimal / decimal.
Para matrizes grandes (10 ** 5 linhas e acima), é melhor usar um matmult vetorizado. Passe em todas as linhas e colunas de uma só vez. É extremamente rápido. Não há loop em python aqui. Eu o projetei originalmente para converter muitas colunas binárias como 0/1 em 10 colunas de gênero diferentes no MovieLens em um único número inteiro para cada linha de exemplo.
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
Respostas:
Você usa a
int
função embutida e passa a ela a base do número de entrada, ou seja,2
para um número binário:Aqui está a documentação para python2 e python3 .
fonte
bin(255)
->'0b11111111'
. Veja esta resposta para detalhes adicionais.>>>
prompt), você não precisa usarprint
nada. O exemplo hipotético do OP não. Então, ele realmente deve ser idêntica em Python 2 e 3.Basta digitar 0b11111111 na interface interativa python:
fonte
Outra maneira de fazer isso é usando o
bitstring
módulo:Observe que o número inteiro não assinado é diferente do número inteiro assinado:
O
bitstring
módulo não é um requisito, mas possui muitos métodos de desempenho para transformar a entrada em e de bits em outras formas, além de manipulá-los.fonte
Usar int com base é o caminho certo a seguir. Eu costumava fazer isso antes de encontrar o int também se baseia. É basicamente uma redução aplicada em uma lista de compreensão da maneira primitiva de converter binário em decimal (por exemplo, 110 = 2 ** 0 * 0 + 2 ** 1 * 1 + 2 ** 2 * 1)
fonte
add = lambda x, y: x + y
,int.__add__
pode ser fornecido para reduzir. Por exemploreduce(int.__add__, ...)
fonte
Uma implementação Python recursiva:
fonte
Binário para decimal:
binário para hexa octal e etc.
Preste atenção a 2 informações separadas por dois pontos.
Dessa maneira, você pode converter entre {binário, octal, hexadecimal, decimal} em {binário, octal, hexadecimal, decimal} alterando o lado direito dos dois pontos [:]
Tente alterar o lado esquerdo do cólon para ter octal / hexadecimal / decimal.
fonte
Para matrizes grandes (10 ** 5 linhas e acima), é melhor usar um matmult vetorizado. Passe em todas as linhas e colunas de uma só vez. É extremamente rápido. Não há loop em python aqui. Eu o projetei originalmente para converter muitas colunas binárias como 0/1 em 10 colunas de gênero diferentes no MovieLens em um único número inteiro para cada linha de exemplo.
fonte