如何使`bin(30)`返回'00011110`而不是'0b11110`?

AME*_*AME 32 python

bin(30)的输出中"b"代表什么:"0b11110"?有什么办法可以摆脱这个"b"吗?如何让bin()的输出始终返回标准的8位数输出?

gim*_*mel 50

使用zfill():

返回左边用数字字符串填充的长度为字符串的数字字符串.正确处理符号前缀.如果width小于len(s),则返回原始字符串.

>>> bin(30)[2:].zfill(8)
'00011110'
>>>
Run Code Online (Sandbox Code Playgroud)

  • 负数怎么样? (4认同)
  • 令人惊讶的是,这似乎是最快的,但是 ackkkk。 (2认同)

Dou*_*der 30

0b类似于0x - 它表示数字格式为二进制(0x表示数字为十六进制).

请参阅如何在python中表达二进制文字?

http://docs.python.org/dev/whatsnew/2.6.html#pep-3127-integer-literal-support-and-syntax

要剥离0b,最简单的方法是使用字符串切片: bin(30)[2:]

同样,格式为8个字符宽:

('00000000'+bin(30)[2:])[-8:]
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用字符串格式化程序(在2.6+中)一步完成所有操作:

"{0:08b}".format(30)
Run Code Online (Sandbox Code Playgroud)

  • 给`string.format`回答+1,打败我吧 (6认同)

neh*_*iah 14

利用着名的format()函数和鲜为人知的第二个参数并将其链接起来zfill()

'b'- 二进制 'x'- 十六进制 'o'- 八进制 'd'- 十进制

>>> print format(30, 'b')
11110
>>> print format(30, 'b').zfill(8)
00011110
Run Code Online (Sandbox Code Playgroud)

应该做.这里'b'代表二进制一样'x','o''d'分别为十六进制,八进制和十进制.


小智 6

您可以使用Python 2Python 3中的格式

>> print( format(15, '08b') )
00001111
Run Code Online (Sandbox Code Playgroud)

[]的