你如何在Python中表示二进制文字?
你如何用Python文字表示整数作为二进制数字?
我很容易findhex的答案:
>>> 0x12AF 4783 >>> 0x100 256
和八进制:
>>> 01267 695 >>> 0100 64
你如何使用文字在Python中expression二进制文件?
答案摘要
- Python 2.5及更早版本:可以使用
int('01010101111',2)
来表示二进制文件int('01010101111',2)
但不能与文字一起使用。 - Python 2.5和更早的版本: 没有办法来expression二进制文字。
- Python 2.6 beta:你可以这样做:
0b1100111
或0B1100111
。 - Python 2.6 beta:也将允许
0o27
或0O27
(第二个字符是字母O)来表示八进制。 - Python 3.0 beta:与2.6相同,但不再允许旧的
027
语法用于八进制。
供参考 – 未来的 Python可能性:
从Python 2.6开始,您可以使用前缀0b或0B来表示二进制文字:
>>> 0b101111 47
您也可以使用新的bin函数来获取数字的二进制表示forms:
>>> bin(173) '0b10101101'
文档的开发版本: Python 2.6中的新function
>>> print int('01010101111',2) 687 >>> print int('11111111',2) 255
其他方式。
你如何在Python中表示二进制文字?
它们不是“二元”文字,而是“整数文字”。 您可以使用二进制格式表示整数文字,其中0
表示B
或b
后面是一系列的零和1,例如:
>>> 0b0010101010 170 >>> 0B010101 21
从Python 3 文档中 ,这些是在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中更改:下划线现在允许用文字分组。
其他expression二进制的方式:
你可以在一个可以被操作的string对象中包含零和string(尽pipe在大多数情况下你可能只需要在整数上进行按位运算) – 只需要传递int和零的string以及从中转换的基数(2 ):
>>> int('010101', 2) 21
您可以select使用0b
或0B
前缀:
>>> int('0b0010101010', 2) 170
如果你传递0
作为基数,那么如果string没有用前缀指定,它将假定基数为10。
>>> int('10101', 0) 10101 >>> int('0b10101', 0) 21
从int转换回可读的二进制文件:
您可以将一个整数传递给bin以查看二进制文字的string表示forms:
>>> bin(21) '0b10101'
而且你可以结合bin
和int
来回:
>>> bin(int('010101', 2)) '0b10101'
如果你想使用前面的零来获得最小宽度,你也可以使用格式规范:
>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0)) '0000010101' >>> format(int('010101', 2), '010b') '0000010101'
0在这里开始指定基地是8(不是10),这很容易看到:
>>> int('010101', 0) 4161
如果你不是以0开始,那么python会假定这个数字是10。
>>> int('10101', 0) 10101
据我可以告诉Python,直到2.5,只支持hex和八进制文字。 我确实发现了一些有关将二进制文件添加到未来版本的讨论,但没有一个确定
我很确定这是Python 3.0中可能用bin()去执行hex()和oct()的事情之一。
编辑:lbrandy的答案在所有情况下都是正确的。