如何在python中将字符串翻译为填充二进制文件?

时间:2015-08-10 10:28:34

标签: python

我制作了一个程序,将文本翻译成二进制代码,但它真的很乱。这是我的代码:

def converter():
    print("message:")
    inputMsg = input()
    msg = ''
    for letter in inputMsg:
        if letter == 'a':
            msg = msg + '01100001'
        elif letter == 'b':
            msg = msg + '01100010'
        elif letter == 'c':
            msg = msg + '01100011'
        elif letter == 'd':
            msg = msg + '01100100'
        elif letter == 'e':
            msg = msg + '01100101'
        elif letter == 'f':
            msg = msg + '01100110'
        elif letter == 'g':
            msg = msg + '011000111'
        elif letter == 'h':
            msg = msg + '01101000'
        elif letter == 'i':
            msg = msg + '01101001'
        elif letter == 'j':
            msg = msg + '01101010'
        elif letter == 'k':
            msg = msg + '01101011'
        elif letter == 'l':
            msg = msg + '01101100'
        elif letter == 'm':
            msg = msg + '01101101'
        elif letter == 'n':
            msg = msg + '01101110'
        elif letter == 'o':
            msg = msg + '01101111'
        elif letter == 'p':
            msg = msg + '01110000'
        elif letter == 'q':
            msg = msg + '01110001'
        elif letter == 'r':
            msg = msg + '01100010'
        elif letter == 's':
            msg = msg + '01110011'
        elif letter == 't':
            msg = msg + '01110100'
        elif letter == 'u':
            msg = msg + '01110101'
        elif letter == 'v':
            msg = msg + '01110110'
        elif letter == 'w':
            msg = msg + '01110111'
        elif letter == 'x':
            msg = msg + '01111000'
        elif letter == 'y':
            msg = msg + '01111001'
        elif letter == 'z':
            msg = msg + '01111010'

        elif letter == 'A':
            msg = msg + '01000001'
        elif letter == 'B':
            msg = msg + '01000010'
        elif letter == 'C':
            msg = msg + '01000011'
        elif letter == 'D':
            msg = msg + '01000100'
        elif letter == 'E':
            msg = msg + '01000101'
        elif letter == 'F':
            msg = msg + '01000110'
        elif letter == 'G':
            msg = msg + '01000111'
        elif letter == 'H':
            msg = msg + '01001000'
        elif letter == 'I':
            msg = msg + '01001001'
        elif letter == 'J':
            msg = msg + '01001010'
        elif letter == 'K':
            msg = msg + '01001011'
        elif letter == 'L':
            msg = msg + '01001100'
        elif letter == 'M':
            msg = msg + '01001101'
        elif letter == 'N':
            msg = msg + '01001110'
        elif letter == 'O':
            msg = msg + '01001111'
        elif letter == 'P':
            msg = msg + '01010000'
        elif letter == 'Q':
            msg = msg + '01010001'
        elif letter == 'R':
            msg = msg + '01000010'
        elif letter == 'S':
            msg = msg + '01010011'
        elif letter == 'T':
            msg = msg + '01010100'
        elif letter == 'U':
            msg = msg + '01010101'
        elif letter == 'V':
            msg = msg + '01010110'
        elif letter == 'W':
            msg = msg + '01010111'
        elif letter == 'X':
            msg = msg + '01011000'
        elif letter == 'Y':
            msg = msg + '01011001'
        elif letter == 'Z':
            msg = msg + '01011010'
        elif letter == ' ':
            msg = msg + '00100000'

    print('\n',msg,'\n')
    print('do again?  (y/n)')
    yn()

def yn():
    yn = input()
    if yn == 'y':
        converter()
    elif yn == 'n':
        pass
    else:
        yn()


 converter()

我的输出没问题,但是你看到我的每个字母都有if / else。还有其他方法可以清洁并提高效率吗?

1 个答案:

答案 0 :(得分:12)

>>> st = "hello"
>>> ' '.join(format(ord(x), '08b') for x in st)
'01101000 01100101 01101100 01101100 01101111

这里发生的是我们遍历字符串x中的每个字符st。在每个项目上,我们运行ord(),它将字符x转换为表示Unicode代码点的整数,例如: 'T' == 84。这个数字我们然后.format成(填充)二进制。 08此处表示该数字的格式为8位数,由左侧0填充。 b然后表示它是二进制或基数2.数字必须填充或没有前导零。