[python] 밑이 2 진 문자열을 int로 변환

기본 2 이진 숫자 문자열을 다음과 같이 int로 변환하고 싶습니다.

>>> '11111111'.fromBinaryToInt()
255

파이썬에서 이것을 할 수있는 방법이 있습니까?



답변

내장 int함수를 사용하여 입력 번호의 기본, 즉 2이진수에 전달하십시오 .

>>> int('11111111', 2)
255

다음은 python2python3에 대한 설명서입니다 .


답변

파이썬 대화 형 인터페이스에서 0b11111111 을 입력 하십시오 .

>>> 0b11111111
    255


답변

이를 수행하는 또 다른 방법은 bitstring모듈 을 사용하는 것입니다 .

>>> from bitstring import BitArray
>>> b = BitArray(bin='11111111')
>>> b.uint
255

부호없는 정수는 부호있는 정수와 다릅니다.

>>> b.int
-1

bitstring모듈은 요구 사항은 아니지만 입력을 비트에서 다른 형식으로 바꾸거나 조작 할 수있는 성능이 뛰어난 방법이 많이 있습니다.


답변

base와 함께 int를 사용하는 것이 올바른 방법입니다. int가 기본을 차지하기 전에이 작업을 수행했습니다. 기본적으로 이진수를 십진수로 변환하는 기본 방식의 목록 이해에 적용되는 감소입니다 (예 : 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))])


답변

무대 뒤에서 무슨 일이 일어나고 있는지 알고 싶다면 여기로 가십시오.

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')


답변

재귀 파이썬 구현 :

def int2bin(n):
    return int2bin(n >> 1) + [n & 1] if n > 1 else [1] 


답변

python3.6 이상을 사용하는 경우 f-string을 사용하여 변환을 수행 할 수 있습니다.

이진수를 십진수로 :

>>> print(f'{0b1011010:#0}')
90

>>> bin_2_decimal = int(f'{0b1011010:#0}')
>>> bin_2_decimal
90

이진수에서 8 진수로 등

>>> f'{0b1011010:#o}'
'0o132'  # octal

>>> f'{0b1011010:#x}'
'0x5a'   # hexadecimal

>>> f'{0b1011010:#0}'
'90'     # decimal

콜론으로 분리 된 2 개의 정보에주의하십시오.

이런 식으로 콜론의 오른쪽을 변경하여 {binary, octal, 16 진수, decimal}을 {binary, octal, 16 진수, decimal}로 변환 할 수 있습니다.

:#b -> converts to binary
:#o -> converts to octal
:#x -> converts to hexadecimal
:#0 -> converts to decimal as above example

8 진수 / 16 진수 / 10 진수를 갖도록 콜론의 왼쪽을 변경해보십시오.