programing

base-2 이진수 문자열을 int로 변환합니다.

randomtip 2022. 9. 11. 16:57
반응형

base-2 이진수 문자열을 int로 변환합니다.

base-2 이진수 문자열을 int로 변환하는 방법은 다음과 같습니다.

>>> '11111111'.fromBinaryToInt()
255

Python으로 할 수 있는 방법이 있나요?

빌트인 사용int()즉, 입력 번호의 밑부분을 전달해야 합니다.2이진수의 경우:

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

다음은 Python 2 및 Python 3에 대한 설명서입니다.

python 인터랙티브인터페이스에 0b111111을 입력합니다.

>>> 0b11111111
    255

또 다른 방법은 모듈을 사용하는 것입니다.

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

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

>>> b.int
-1

bitstring모듈은 필수는 아니지만 비트 입력을 다른 형식으로 변환하고 조작하기 위한 많은 성능 방법이 있습니다.

int를 base와 함께 사용하는 것이 올바른 방법입니다.int도 베이스가 된다는 걸 알기 전에 이걸 하곤 했어요기본적으로 이진수를 10진수로 변환하는 원시적인 방법의 목록 이해에 적용되는 감소입니다(예: 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')

재귀 Python 구현:

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

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

2진수에서 10진수:

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

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

2진수에서 8진수까지의 16진수 등

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

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

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

결장으로 구분된 두 가지 정보에 주의하십시오.

이 방법으로 콜론의 오른쪽을 변경하여 {binary, 8진수, 16진수, 10진수}에서 {binary, 8진수, 16진수, 10진수}로 변환할 수 있습니다.

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

결장의 왼쪽을 8진수/16진수/10진수로 바꿔보세요.

큰 행렬(10**5 행 이상)의 경우 벡터화된 매트멀트를 사용하는 것이 좋습니다.모든 줄과 콜을 한 방에 통과시켜라.굉장히 빨라요.여기 python에는 루핑이 없습니다.원래는 MovieLens의 10가지 장르 컬럼에 대해 0/1과 같은 바이너리 컬럼을 하나의 정수로 변환하기 위해 설계했습니다.

def BitsToIntAFast(bits):
  m,n = bits.shape
  a = 2**np.arange(n)[::-1]  # -1 reverses array of powers of 2 of same length as bits
  return bits @ a

레코드가 기본 python3에서 왔다 갔다 하려면:

a = 10
bin(a)
# '0b1010'

int(bin(a), 2)
# 10
eval(bin(a))
# 10

위의 답변에 기재되어 있지 않은 다른 간단한 방법을 소개합니다.

>>> eval('0b' + '11111111')
255

확실히, 이것은 그다지 빠르지 않을지도 모릅니다.또, 그 문자열이, 악의가 있는 것(사용자 입력등)에 의해서 행해지고 있는 경우는, 매우 나쁜 생각입니다만, 완전성을 위해서 동작합니다.

언급URL : https://stackoverflow.com/questions/8928240/convert-base-2-binary-number-string-to-int

반응형