ja po prostu lubię konwersji liczby binarnej ciąg bazowy-2 do int, coś takiego:Konwersja base-2 binarna liczba ciąg do int
>>> '11111111'.fromBinaryToInt()
255
Czy istnieje sposób, aby zrobić to w Pythonie ?
ja po prostu lubię konwersji liczby binarnej ciąg bazowy-2 do int, coś takiego:Konwersja base-2 binarna liczba ciąg do int
>>> '11111111'.fromBinaryToInt()
255
Czy istnieje sposób, aby zrobić to w Pythonie ?
użyć wbudowanego int
funkcji i przekazać go podstawa numeru wejścia, tj 2
na liczbę binarną:
>>> int('11111111', 2)
255
Dzięki, dokładnie to, czego szukałem. –
Jeśli ktoś szuka czegoś przeciwnego: 'bin (255)' -> ''0b11111111''. Aby uzyskać dodatkowe informacje, patrz [ta odpowiedź] (http://stackoverflow.com/a/699892/638546). –
Należy zauważyć, że działa to tylko dla liczb całkowitych bez znaku binarnego. W przypadku liczb całkowitych ze znakiem, opcje konwersji są bałaganem. –
Innym sposobem na to jest za pomocą modułu bitstring
:
>>> from bitstring import BitArray
>>> b = BitArray(bin='11111111')
>>> b.uint
255
Należy zauważyć, że liczba całkowita bez znaku różni się od podpisanego integer:
>>> b.int
-1
Moduł bitstring
nie jest wymogiem , ale ma wiele wydajnych metod przekształcania danych wejściowych do i z bitów w inne formy, a także manipulowania nimi.
Używanie int z bazą to właściwa droga. Zwykłem to robić, zanim znalazłem int również. Jest to w zasadzie zmniejszają stosowane na liście zrozumienia pierwotnego drodze konwersji pliku na dziesiętne (np 110 = 2 ** 0 * 0 + 1 * 2 ** 2 ** 1 + 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))])
Zamiast definiować 'add = lambda x, y: x + y', można podać' int .__ add__' w celu zmniejszenia. Na przykład. 'reduce (int .__ add__, ...)' –
Wystarczy wpisać 0b11111111 w Pythonie interaktywny interfejs:
>>> 0b11111111
255
Jeśli chcesz wiedzieć, co dzieje się za sceną, to tutaj jesteś.
class Binary():
def __init__(self, binNumber):
self._binNumber = binNumber
self._binNumber = self._binNumber[::-1]
self._binNumber = list(self._binNumber)
self._x = [1]
self._count = 1
self._change = 2
self._amount = 0
print(self._ToNumber(self._binNumber))
def _ToNumber(self, number):
self._number = number
for i in range (1, len (self._number)):
self._total = self._count * self._change
self._count = self._total
self._x.append(self._count)
self._deep = zip(self._number, self._x)
for self._k, self._v in self._deep:
if self._k == '1':
self._amount += self._v
return self._amount
mo = Binary('101111110')
Choć to naprawdę nie ma znaczenia, ciąg binarny zazwyczaj oznacza łańcuch zawierający aktualne dane binarne (bajt zawiera dwie cyfry szesnastkowe, czyli „\ x00” jest zerowy bajt). –