如何打印二进制数
How to print a binary number
我开始研究 Python 中的 Vernam 密码,显然我不知道如何在 Python 中使用二进制,例如,如果我 print 00011
安慰一下 returns a 9
.
"""Sistema de Cifrado Vernam"""
#alfabeto
alfabeto = {"a":00011,"b":11001,"c":01110,"d":01001,"e":00001,"f":01101,"g":11010,"h":10100,"i":00110,"j":01011,"k":01111,"l":10010,"m":11100,
"n":01100,"o":11000,"q":10111,"r":01010,"s":00101,"t":10000,"u":00111,"v":11110,"w":10011,"x":11101,"y":10101,"z":10001,
"<":01000,"=":00010,"fdown":11111,"fup":11011," ":00100, "":00000}
"""Mensaje en texto plano"""
#Susituir por input
mensaje = "stack"
m = []
for e in mensaje:
m.append(alfabeto[e])
print m
输出
[65, 10000, 9, 584, 585]
我想打印 ASCII 版本的实际二进制数。
在Python中,您可以在数字上使用不同的前缀来指定不同的数字基数。
- 如果数字以
0b
开头,您将得到一个二进制数(基数为 2)。所以,0b101
== 5
.
- 如果数字以
0o
开头(或者只是 Python 2 中的 0
),你会得到一个
八进制数(基数 8)。所以 0o101 == 65
.
- 如果数字以
0x
开头,您将得到一个十六进制数(基数为 16)。所以
0x101 == 257
.
- 否则,你会得到一个十进制数。
您需要在二进制数前加上 0b
:
"""Sistema de Cifrado Vernam"""
#alfabeto
alfabeto = {"a":0b00011,"b":0b11001,"c":0b01110,"d":0b01001,"e":0b00001,"f":0b01101,"g":0b11010,"h":0b10100,"i":0b00110,"j":0b01011,"k":0b01111,"l":0b10010,"m":0b11100,
"n":0b01100,"o":0b11000,"q":0b10111,"r":0b01010,"s":0b00101,"t":0b10000,"u":0b00111,"v":0b11110,"w":0b10011,"x":0b11101,"y":0b10101,"z":0b10001,
"<":0b01000,"=":0b00010,"fdown":0b11111,"fup":0b11011," ":0b00100, "":0b00000}
"""Mensaje en texto plano"""
#Susituir por input
mensaje = "stack"
m = []
for e in mensaje:
m.append(alfabeto[e])
print m
这输出:
>>>
[5, 16, 3, 14, 15]
有关为什么需要 0b
的详细信息,请参见此处:https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals
补充问题的后续编辑:
如果你想用二进制格式化你的输出,要么使用 bin() or format():
>>> [format(e, '05b') for e in m]
['00101', '10000', '00011', '01110', '01111']
我开始研究 Python 中的 Vernam 密码,显然我不知道如何在 Python 中使用二进制,例如,如果我 print 00011
安慰一下 returns a 9
.
"""Sistema de Cifrado Vernam"""
#alfabeto
alfabeto = {"a":00011,"b":11001,"c":01110,"d":01001,"e":00001,"f":01101,"g":11010,"h":10100,"i":00110,"j":01011,"k":01111,"l":10010,"m":11100,
"n":01100,"o":11000,"q":10111,"r":01010,"s":00101,"t":10000,"u":00111,"v":11110,"w":10011,"x":11101,"y":10101,"z":10001,
"<":01000,"=":00010,"fdown":11111,"fup":11011," ":00100, "":00000}
"""Mensaje en texto plano"""
#Susituir por input
mensaje = "stack"
m = []
for e in mensaje:
m.append(alfabeto[e])
print m
输出
[65, 10000, 9, 584, 585]
我想打印 ASCII 版本的实际二进制数。
在Python中,您可以在数字上使用不同的前缀来指定不同的数字基数。
- 如果数字以
0b
开头,您将得到一个二进制数(基数为 2)。所以,0b101 == 5
. - 如果数字以
0o
开头(或者只是 Python 2 中的0
),你会得到一个 八进制数(基数 8)。所以0o101 == 65
. - 如果数字以
0x
开头,您将得到一个十六进制数(基数为 16)。所以0x101 == 257
. - 否则,你会得到一个十进制数。
您需要在二进制数前加上 0b
:
"""Sistema de Cifrado Vernam"""
#alfabeto
alfabeto = {"a":0b00011,"b":0b11001,"c":0b01110,"d":0b01001,"e":0b00001,"f":0b01101,"g":0b11010,"h":0b10100,"i":0b00110,"j":0b01011,"k":0b01111,"l":0b10010,"m":0b11100,
"n":0b01100,"o":0b11000,"q":0b10111,"r":0b01010,"s":0b00101,"t":0b10000,"u":0b00111,"v":0b11110,"w":0b10011,"x":0b11101,"y":0b10101,"z":0b10001,
"<":0b01000,"=":0b00010,"fdown":0b11111,"fup":0b11011," ":0b00100, "":0b00000}
"""Mensaje en texto plano"""
#Susituir por input
mensaje = "stack"
m = []
for e in mensaje:
m.append(alfabeto[e])
print m
这输出:
>>>
[5, 16, 3, 14, 15]
有关为什么需要 0b
的详细信息,请参见此处:https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals
补充问题的后续编辑:
如果你想用二进制格式化你的输出,要么使用 bin() or format():
>>> [format(e, '05b') for e in m]
['00101', '10000', '00011', '01110', '01111']