我一直在研究一个Python项目,我试图使用原始的ASCII代码,并将其合并到一个密码中。但在此之前,我想知道是否有办法将ascii递归转换为二进制。 Python 2.7.5顺便说一下。 这是我的代码:
inputMessage= raw_input("Enter message for conversion: ")
print "Decoded string: "
#text to ascii
for ch in inputMessage:
print ord(ch)
print "\n\n"
#ascii to binary
print "ASCII to Binary:"
print bin(ord(ch))
print
print "The Binary without the '0b':"
for ch in inputMessage:
print bin(ord(ch))[2::]
我在shell中的输出:
Enter message for conversion: Hi, my name is Johnny
Decoded string:
72
105
44
32
109
121
32
110
97
109
101
32
105
115
32
74
111
104
110
110
121
ASCII to Binary:
0b1001000
0b1101001
0b101100
0b100000
0b1101101
0b1111001
0b100000
0b1101110
0b1100001
0b1101101
0b1100101
0b100000
0b1101001
0b1110011
0b100000
0b1001010
0b1101111
0b1101000
0b1101110
0b1101110
0b1111001
我需要知道的是,在转换为二进制时,如何以递归方式遍历数字的每个ascii输出数。有人有解决方案吗?
答案 0 :(得分:1)
def toBin(n):
return toBin(n/2) + str(n%2) if n else ""
>>> toBin(ord('A'))
'1000001'
>>> Message= raw_input("Enter message for conversion: ")
Enter message for conversion: Hey now!
>>> ''.join(toBin(ord(c)) for c in Message)
'100100011001011111001100000110111011011111110111100001'
如果需要它可以用于n = 0
,请使用此选项def toBin(n, z=1):
return toBin(n/2, 0) + str(n%2) if n else str(n)*z
如果你需要填充到8位,你可以这样做:
def toBin(n, z=8):
return toBin(n/2, z-1) + str(n%2) if n else str(n)*z
>>> toBin(10)
'00001010'
>>> toBin(ord("A"))
'01000001'
答案 1 :(得分:0)
>>> my_string = 'myname is james'
>>> my_binary = [bin(ord(i)) for i in js]
>>> my_binary
['0b1101101', '0b1111001', '0b1101110', '0b1100001', '0b1101101', '0b1100101', '0b100000', '0b1101001', '0b1110011', '0b100000', '0b1101010', '0b1100001', '0b1101101', '0b1100101', '0b1110011']
>>> bin = ''.join(jb)
>>> bin
'0b11011010b11110010b11011100b11000010b11011010b11001010b1000000b11010010b11100110b1000000b11010100b11000010b11011010b11001010b1110011'
答案 2 :(得分:0)
这是十进制基数10到二进制数字列表的递归转换:
def binary(n):
if n < 2:
return [n]
else:
return binary(n / 2) + [n % 2]
像这样使用它:
>>> tgt='33'
>>> print ''.join(map(str, binary(int(tgt))))
100001
如果要直接返回字符串(绕过列表和字符串转换),可以使用此函数:
def d2bin(n):
s=str(n%2)
if n>>1 > 0:
s+=d2bin(n>>1)
return s
像这样使用:
>>> d2bin(0)
'0'
>>> d2bin(65)
'1000001'