답변:
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'
format(192,'08b')+'.'+format(0,'08b')+'.'+format(2,'08b')+'.'+format(33,'08b')
11000000.00000000.00000010.00100001
str.format()
자리 표시 자의 콜론 뒤에 format () 함수의 두 번째 인수를 사용하십시오 {:..}
.
f"{192:08b}.{0:08b}.{2:08b}.{33:08b}"
.
>>> '{:08b}'.format(1)
'00000001'
참조 : 형식 사양 미니 언어
참고 파이썬 2.6 또는 그 이상을 위해, 당신은 전에 위치 인수 식별자를 생략 할 수 :
사용하므로,
>>> '{0:08b}'.format(1)
'00000001'
str.format()
때 여기 에서 사용할 필요는 없습니다 format()
. 0b
접두사 가 없습니다 .
str.format
보다 유연 format()
합니다. 나는 그 format
기능이 존재 한다는 것을 잊어 버린다 . 이 경우에는 완벽하게 적합합니다.
str.format()
하나의 {}
요소 만 사용 하고 다른 텍스트는 사용 하지 않고 문자열 템플릿을 사용 하지 않으면 하나의 값을 형식화하는 것입니다 . 이 경우을 사용하십시오 format()
. :-)
문자열 형식 미니 언어를 사용할 수 있습니다.
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))
#
. 또한 format()
전체 문자열 템플릿을 수행 할 필요가 없습니다.
파이썬을 사용하는 경우 >= 3.6
, 가장 깨끗한 방법은 사용하는 F-문자열 로 문자열 서식 :
>>> var = 23
>>> f"{var:#010b}"
'0b00010111'
설명:
var
형식화 할 변수:
이 이후의 모든 것은 형식 지정자입니다.#
대체 형식을 사용하십시오 ( 0b
접두사 추가 )0
제로 패드10
10에서 오프까지의 총 길이 (에 대한 2 개의 문자 포함 0b
)b
숫자에 이진 표현을 사용format(var, "#010b")
통신 의도 훨씬 더. 그러나 가장 빠른 옵션입니다. 그러나 당신은 이미 알고 있습니다. 왜냐하면 당신 이 내 답변에 게시 한 모든 것을 이미 다루었 기 때문 입니다.
때로는 간단한 라이너 하나를 원할 수도 있습니다.
binary = ''.join(['{0:08b}'.format(ord(x)) for x in input])
파이썬 3
[ ]
필요하지 않아야 함에 유의하십시오 join()
. 제너레이터 표현식을 승인합니다. ''.join('{0:08b}'.format(ord(x)) for x in input)
str.join()
는 두 번의 패스가 필요하기 때문에 생성기 입력은 먼저 결합하기 전에 목록으로 변환됩니다. 이것은 성능에 약간의 영향을 미치며 생성기 표현식이 아닌 목록 이해를 전달하는 것이 실제로 더 좋습니다 . 규칙에 예외가있는 경우 하나입니다.
이런 식으로 사용할 수 있습니다
("{:0%db}"%length).format(num)
"{:0{l}b}".format(num, l=length)
파이썬 구문의 rjust string 메소드를 사용할 수 있습니다 : string.rjust (length, fillchar) fillchar는 선택 사항입니다
당신의 질문에 대해 당신은 이런 식으로 쓸 수 있습니다.
'0b'+ '1'.rjust(8,'0)
따라서 '0b00000001'이어야합니다.
int
.이를 텍스트 이진 표현으로 변환하는 것입니다. 로 시작하지도 않습니다 int
.
zfill을 사용할 수 있습니다 :
print str(1).zfill(2)
print str(10).zfill(2)
print str(100).zfill(2)
인쇄물:
01
10
100
숫자를 출력 할 때뿐만 아니라 변수에 할당해야 할 때 도움이 되므로이 솔루션이 마음에 듭니다 ... 예 : x = str (datetime.date.today (). month) .zfill (2) 2 월에 x를 '02'로 반환합니다.
bin(14)
제공 ''0b1110 ''와 bin(14).zfill(8)
원하는 무슨이다 ''000b1110 '`하지`0b00001110'`하는 제공