파이썬에서 정수 (또는 Long)를 이진 문자열로 변환 할 수있는 통조림 파이썬 방법이 있습니까?
Google에는 무수한 dec2bin () 함수가 있습니다 …하지만 내장 함수 / 라이브러리를 사용할 수 있기를 바랍니다.
답변
파이썬의 문자열 형식 메소드는 형식 스펙을 취할 수 있습니다.
>>> "{0:b}".format(37)
'100101'
답변
답변
파이썬은 실제로 않습니다 이미 이것에 대한 내장 무언가가, 같은 작업을 할 수있는 능력 '{0:b}'.format(42)
당신을 위해 (문자열) 비트 패턴을 줄 것이다, 42
또는를 101010
.
보다 일반적인 철학을 위해 언어 나 라이브러리는 사용자에게 원하는 모든 것을 제공하지 않습니다 . 정확히 필요한 것을 제공하지 않는 환경에서 작업하는 경우 동일한 내용을 두 번 작성할 필요가 없도록 개발할 때 코드 스 니펫을 수집해야합니다. 예를 들어 의사 코드와 같은 :
define intToBinString, receiving intVal:
if intVal is equal to zero:
return "0"
set strVal to ""
while intVal is greater than zero:
if intVal is odd:
prefix "1" to strVal
else:
prefix "0" to strVal
divide intVal by two, rounding down
return strVal
십진수 값을 기준으로 이진 문자열을 구성합니다. 가장 유사하지 않은 의사 코드의 일반적인 비트임을 명심하십시오.제안하는 반복으로 큰 차이를 만들지는 않지만 효율적인 방법 . 그것은 실제로 그것이 어떻게 수행 될 수 있는지에 대한 지침으로 의미됩니다.
일반적인 아이디어는 다음의 코드를 선호하는 순서대로 사용하는 것입니다.
- 언어 또는 내장 라이브러리
- 적합한 라이센스가있는 타사 라이브러리.
- 자신의 컬렉션.
- 새로운 내용을 작성해야합니다 (나중에 자신의 컬렉션에 저장).
답변
0b 접두사가없는 텍스트 표현을 원하면 다음을 사용할 수 있습니다.
get_bin = lambda x: format(x, 'b')
print(get_bin(3))
>>> '11'
print(get_bin(-3))
>>> '-11'
n 비트 표현을 원할 때 :
get_bin = lambda x, n: format(x, 'b').zfill(n)
>>> get_bin(12, 32)
'00000000000000000000000000001100'
>>> get_bin(-12, 32)
'-00000000000000000000000000001100'
또는 기능을 선호하는 경우 :
def get_bin(x, n=0):
"""
Get the binary representation of x.
Parameters
----------
x : int
n : int
Minimum number of digits. If x needs less digits in binary, the rest
is filled with zeros.
Returns
-------
str
"""
return format(x, 'b').zfill(n)
답변
참고로 :
def toBinary(n):
return ''.join(str(1 & int(n) >> i) for i in range(64)[::-1])
이 함수는 18446744073709551615
string으로 표시되는 만큼 양의 정수를 변환 할 수 있습니다 '1111111111111111111111111111111111111111111111111111111111111111'
.
훨씬 더 큰 정수를 제공하도록 수정할 수 있지만 "{0:b}".format()
또는 만큼 편리하지는 않습니다 bin()
.