2013-03-29 40 views
2

我编写了一个可与原始字节一起工作的程序(我不知道这是否是正确的名称!),但用户将以纯字符串形式输入数据。将字符串转换为原始字节

如何转换它们?

我试过wih方法,但它返回一个长度为0的字符串!

这里的起始字符串:

5A05705DC25CA15123C8E4750B80D0A9 

这里有我需要的结果是:

\x5A\x05\x70\x5D\xC2\x5C\xA1\x51\x23\xC8\xE4\x75\x0B\x80\xD0\xA9 

这里是我写的方法:

def convertStringToByte(string): 
    byte_char = "\\x" 
    n=2 
    result = "" 
    bytesList = [string[i:i+n] for i in range(0, len(string), n)] 
    for i in range(0, len(bytesList)): 
     bytesList[i] = byte_char + bytesList[i] 
    return result 
+1

'return''.join(bytesList)''怎么样? – dmg

回答

9

使用binascii.unhexlify()

import binascii 

binary = binascii.unhexlify(text) 

同样的模块有binascii.hexlify()也镜像操作。

演示:

>>> import binascii 
>>> binary = '\x5A\x05\x70\x5D\xC2\x5C\xA1\x51\x23\xC8\xE4\x75\x0B\x80\xD0\xA9' 
>>> text = '5A05705DC25CA15123C8E4750B80D0A9' 
>>> binary == binascii.unhexlify(text) 
True 
>>> text == binascii.hexlify(binary).upper() 
True 

hexlify()操作产生小写十六进制,但是,很容易固定有.upper()呼叫。

4

必须从5A得到(代表十六进制数的字符串)至0x5A90(整数)并将它们输入chr()。你可以做的第一转换与int('0x5A', 16),所以你会得到类似

chr(int('0x5A', 16)) 
相关问题