如何将字符串中的单词转换为二进制

时间:2015-03-17 14:43:56

标签: python string binary hex

我正在研究一个模块(import module的东西),它有助于将字符串中的单词转换为hexbinary(如果可能的话还有八进制)。我完成了十六进制部分但是现在我在二进制文件的情况下苦苦挣扎。我不知道从哪里开始或者做什么。我想做的事情很简单。它需要一个输入字符串,如'test'。模块内部会将其转换为二进制文件。

到目前为止我所做的事情如下:

def string_hex(string): # Converts a word to hex
    keyword = string.encode()
    import binascii
    hexadecimal=str(binascii.hexlify(keyword), 'ascii')
    formatted_hex=':'.join(hexadecimal[i:i+2] for i in range(0, len(hexadecimal), 2))
    return formatted_hex

def hex_string(hexa):
# hexa(Given this name because there is a built-in function hex()) should be written as string.For accuracy on words avoid symbols(, . !)
    string = bytes.fromhex(hexa)
    formatted_string = string.decode()
    return formatted_string

我保存在我以名称experiment.py安装我的python的目录中。这就是我称之为的方式。

>>> from experiment import string_hex
>>> string_hex('test')
'74:65:73:74'

就像我能够将它转换回来一样:

>>> from experiment import hex_string
>>> hex_string('74657374')
'test'

就像这样想将字符串中的单词转换为二进制文件。还有一件事我正在使用python 3.4.2。请帮助我。

1 个答案:

答案 0 :(得分:1)

您可以按照以下方式执行此操作。您甚至不必导入binascii

def string_hex(string):
    return ':'.join(format(ord(c), 'x') for c in string)

def hex_string(hexa):
    hexgen = (hexa[i:i+2] for i in range(0, len(hexa), 2))
    return ''.join(chr(eval('0x'+n)) for n in hexgen)

def string_bin(string):
    return ':'.join(format(ord(c), 'b') for c in string)

def bin_string(binary):
    bingen = (binary[i:i+7] for i in range(0, len(binary), 7))
    return ''.join(chr(eval('0b'+n)) for n in bingen)

这是输出:

>>> string_hex('test')
'74:65:73:74'
>>> hex_string('74657374')
'test'
>>> string_bin('test')
'1110100:1100101:1110011:1110100'
>>> bin_string('1110100110010111100111110100')
'test'