[python] 이진 문자열에 파이썬 int?

파이썬에서 정수 (또는 Long)를 이진 문자열로 변환 할 수있는 통조림 파이썬 방법이 있습니까?

Google에는 무수한 dec2bin () 함수가 있습니다 …하지만 내장 함수 / 라이브러리를 사용할 수 있기를 바랍니다.



답변

파이썬의 문자열 형식 메소드는 형식 스펙을 취할 수 있습니다.

>>> "{0:b}".format(37)
'100101'

Python 2 용 형식 사양 문서

Python 3의 형식 사양 문서


답변

bin()와 동등한 것으로 찾고 있다면 hex()python 2.6에 추가되었습니다.

예:

>>> bin(10)
'0b1010'


답변

파이썬은 실제로 않습니다 이미 이것에 대한 내장 무언가가, 같은 작업을 할 수있는 능력 '{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])

이 함수는 18446744073709551615string으로 표시되는 만큼 양의 정수를 변환 할 수 있습니다 '1111111111111111111111111111111111111111111111111111111111111111'.

훨씬 더 큰 정수를 제공하도록 수정할 수 있지만 "{0:b}".format()또는 만큼 편리하지는 않습니다 bin().


답변

문자열 형식을 사용하는 간단한 방법은이 페이지를 참조 하십시오 .

>> "{0:b}".format(10)
'1010'

이진 문자열의 길이를 고정하려면 다음을 사용할 수 있습니다.

>> "{0:{fill}8b}".format(10, fill='0')
'00001010'

2의 보수가 필요한 경우 다음 라인을 사용할 수 있습니다.

'{0:{fill}{width}b}'.format((x + 2**n) % 2**n, fill='0', width=n)

여기서 n은 이진 문자열의 너비입니다.


답변

이것은 파이썬 3 용이며 선행 0을 유지합니다!

print(format(0, '08b'))

여기에 이미지 설명을 입력하십시오