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
'programing' 카테고리의 다른 글
Android-java - 객체 내의 특정 값을 기준으로 객체 목록을 정렬하는 방법 (0) | 2022.09.11 |
---|---|
Ajax POST 요청에 대한 Laravel csrf 토큰 불일치 (0) | 2022.09.11 |
MySQL에 삽입할 때 PHP에서 단일 따옴표 이스케이프 (0) | 2022.09.11 |
Mariadb 업데이트 문을 실행하는 동안 오류가 발생했습니다. (0) | 2022.09.11 |
Python 종료 코드 (0) | 2022.09.11 |