[python] 이진으로 변환하고 파이썬에서 선행 0을 유지하십시오.

파이썬에서 bin () 함수를 사용하여 정수를 이진으로 변환하려고합니다. 그러나 항상 앞에 오는 0을 제거하여 결과는 항상 8 비트가되도록합니다.

예:

bin(1) -> 0b1

# What I would like:
bin(1) -> 0b00000001

이 방법이 있습니까?



답변

format()기능을 사용하십시오 :

>>> format(14, '#010b')
'0b00001110'

format()기능은 단순히 Format Specification 미니 언어에 따라 입력을 포맷합니다 . 은 #형식이 포함하게 0b프리픽스 및 010크기는 10 개 문자와 폭에 맞도록 출력 포맷 0패딩; 0b접두어 는 2 자 , 이진수는 8 자입니다.

가장 컴팩트하고 직접적인 옵션입니다.

결과를 더 큰 문자열에 넣으려면 서식이 지정된 문자열 리터럴 (3.6+)을 사용하거나 자리 표시 자의 콜론 뒤에 함수 str.format()의 두 번째 인수를 사용하십시오 .format(){:..}

>>> value = 14
>>> f'The produced output, in binary, is: {value:#010b}'
'The produced output, in binary, is: 0b00001110'
>>> 'The produced output, in binary, is: {:#010b}'.format(value)
'The produced output, in binary, is: 0b00001110'

마찬가지로 단일 값의 서식을 지정하더라도 (더 큰 문자열로 결과를 넣지 않아도) 서식이 지정된 문자열 리터럴을 사용하는 것이 다음을 사용하는 것보다 빠릅니다 format().

>>> import timeit
>>> timeit.timeit("f_(v, '#010b')", "v = 14; f_ = format")  # use a local for performance
0.40298633499332936
>>> timeit.timeit("f'{v:#010b}'", "v = 14")
0.2850222919951193

그러나 format(...)의도를 더 잘 전달하기 위해 타이트한 루프의 성능이 중요한 경우에만 사용합니다 .

0b접두사 를 원하지 않으면 간단히 #필드를 삭제하고 필드 길이를 조정하십시오.

>>> format(14, '08b')
'00001110'


답변

>>> '{:08b}'.format(1)
'00000001'

참조 : 형식 사양 미니 언어


참고 파이썬 2.6 또는 그 이상을 위해, 당신은 전에 위치 인수 식별자를 생략 할 수 :사용하므로,

>>> '{0:08b}'.format(1)
'00000001'      


답변

나는 사용하고있다

bin(1)[2:].zfill(8)

인쇄합니다

'00000001'


답변

문자열 형식 미니 언어를 사용할 수 있습니다.

def binary(num, pre='0b', length=8, spacer=0):
    return '{0}{{:{1}>{2}}}'.format(pre, spacer, length).format(bin(num)[2:])

데모:

print binary(1)

산출:

'0b00000001'

편집 :
@Martijn Pieters 아이디어를 기반으로

def binary(num, length=8):
    return format(num, '#0{}b'.format(length + 2))


답변

파이썬을 사용하는 경우 >= 3.6, 가장 깨끗한 방법은 사용하는 F-문자열문자열 서식 :

>>> var = 23
>>> f"{var:#010b}"
'0b00010111'

설명:

  • var 형식화 할 변수
  • : 이 이후의 모든 것은 형식 지정자입니다.
  • #대체 형식을 사용하십시오 ( 0b접두사 추가 )
  • 0 제로 패드
  • 1010에서 오프까지의 총 길이 (에 대한 2 개의 문자 포함 0b)
  • b 숫자에 이진 표현을 사용

답변

때로는 간단한 라이너 하나를 원할 수도 있습니다.

binary = ''.join(['{0:08b}'.format(ord(x)) for x in input])

파이썬 3


답변

이런 식으로 사용할 수 있습니다

("{:0%db}"%length).format(num)