syntax -如何在Python中表示二进制文本?

Translate

如何使用Python文字将整数表示为二进制数?

我很容易找到十六进制的答案:

>>> 0x12AF
4783
>>> 0x100
256

和八进制:

>>> 01267
695
>>> 0100
64

如何使用文字在Python中表示二进制?


答案摘要

  • Python 2.5及更早版本:可以使用int('01010101111',2)但不是文字。
  • Python 2.5及更早版本:没门表达二进制文字。
  • Python 2.6 beta:您可以这样做:0b1100111要么0B1100111.
  • Python 2.6 beta:还将允许0o27要么0O27(第二个字符是字母O)代表八进制。
  • Python 3.0 beta:与2.6相同,但将不再允许旧版本027八进制的语法。
This question and all comments follow the "Attribution Required."

所有的回答

Translate

以供参考-未来Python的可能性:
从Python 2.6开始,您可以使用前缀表示二进制文字0b要么0B:

>>> 0b101111
47

您也可以使用新的箱子函数以获取数字的二进制表示形式:

>>> bin(173)
'0b10101101'

文档的开发版本:Python 2.6的新增功能

来源
Translate
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

另一种方式。

来源
Translate

您如何在Python中表达二进制文字?

它们不是“二进制”文字,而是“整数文字”。您可以使用带有0跟一个B要么b随后是一系列零和一,例如:

>>> 0b0010101010
170
>>> 0B010101
21

从Python 3docs,以下是在Python中提供整数文字的方式:

整数文字由以下词汇定义描述:

integer      ::=  decinteger | bininteger | octinteger | hexinteger
decinteger   ::=  nonzerodigit (["_"] digit)* | "0"+ (["_"] "0")*
bininteger   ::=  "0" ("b" | "B") (["_"] bindigit)+
octinteger   ::=  "0" ("o" | "O") (["_"] octdigit)+
hexinteger   ::=  "0" ("x" | "X") (["_"] hexdigit)+
nonzerodigit ::=  "1"..."9"
digit        ::=  "0"..."9"
bindigit     ::=  "0" | "1"
octdigit     ::=  "0"..."7"
hexdigit     ::=  digit | "a"..."f" | "A"..."F"

除了可以存储在可用内存中的整数之外,整数字面量的长度没有限制。

请注意,不允许使用非零十进制数字开头的零。这是为了消除C样式八进制文字的歧义,Python在3.0版之前使用了这些样式。

整数文字的一些示例:

7     2147483647                        0o177    0b100110111
3     79228162514264337593543950336     0o377    0xdeadbeef
      100_000_000_000                   0b_1110_0101

在3.6版中进行了更改:现在允许在文字中将下划线用于分组目的。

其他表达二进制的方式:

您可以在可操作的字符串对象中包含零和一(尽管在大多数情况下,您可能应该对整数进行按位运算)-只需将零和一的字符串以及您要从中转换的基数传递给int ):

>>> int('010101', 2)
21

您可以选择拥有0b要么0B字首:

>>> int('0b0010101010', 2)
170

如果你通过了0作为基数,如果字符串未指定前缀,它将假设基数为10:

>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21

从int转换回人类可读的二进制文件:

您可以将整数传递给bin以查看二进制文字的字符串表示形式:

>>> bin(21)
'0b10101'

而且你可以结合binint来回走:

>>> bin(int('010101', 2))
'0b10101'

如果希望最小宽度和前面的零,也可以使用格式规范:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'
来源
Translate

开头的0表示底数是8(而不是10),这很容易看到:

>>> int('010101', 0)
4161

如果您不以0开头,则python假定数字以10为底。

>>> int('10101', 0)
10101
来源
Translate

据我所知,直到2.5,Python仅支持十六进制和八进制文字。我确实找到了一些有关在将来的版本中添加二进制文件的讨论,但没有明确的定义。

来源
Translate

我很确定这是由于Python 3.0的变化之一,也许bin()与hex()和oct()一起使用。

编辑:lbrandy的答案在所有情况下都是正确的。

来源