파이썬에서 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
제로 패드10
10에서 오프까지의 총 길이 (에 대한 2 개의 문자 포함0b
)b
숫자에 이진 표현을 사용
답변
때로는 간단한 라이너 하나를 원할 수도 있습니다.
binary = ''.join(['{0:08b}'.format(ord(x)) for x in input])
파이썬 3
답변
이런 식으로 사용할 수 있습니다
("{:0%db}"%length).format(num)