如何将表示字节的Python字符串转换为实际字节?

时间:2010-07-19 15:50:45

标签: python

我有一个字符串:“01030009”,我想得到另一个字符串(因为在Python 2.x中我们使用字符串作为字节)newString将产生这个结果:

for a in newString:
    print ord(a)

0
1
0
3
0
0
0
9

由于

3 个答案:

答案 0 :(得分:8)

''.join(chr(int(x)) for x in oldString)

chrord的倒数。

答案 1 :(得分:2)

所有“深度内置”方式都以不同于你想要的方式将字符解释为字节,因为你想要的方式似乎仅限于表示小于10的字节(或者如果你想使用的话,小于16)十六进制,只是完全忘了提它)。换句话说,你想要的代码可以代表一个真正微不足道的字节字符串部分,因此以任何方式“官方化”(例如以内置方式支持它)是荒谬的!

例如,考虑长度为8的字符串(您的示例的短长度),存在的长度的字节字符串总数为256 ** 8,而您选择的表示法的数字可以是10 ** 8 代表>>> exist = 256 ** 8 >>> repre = 10 ** 8 >>> print exist, repre 18446744073709551616 100000000 >>> print (repre / float(exist)) 5.42101086243e-12 >>> 。即....:

{{1}}

那么为什么你会期望任何形式的“内置”官方支持表示,即使对于如此真正的短字符串,也只能代表可能字节字符串的十亿分之一的千分之五? “特殊情况”这个词是为了比这更频繁地发生的事情而发明的(如果你每秒都有一个随机的8字节字符串,那么在你最终得到一个可以代表的字符串之前的几个世纪当然,更长的字节串会以指数方式加剧这种影响。

有许多“官方”方案用于表示字节字符串,例如base64中指定的RFC 3548和朋友... ...您想要的方案非常有意义其中;-)。 那些当然是在Python中获得“官方”内置支持的方案。

答案 2 :(得分:2)

对于多样性:

import string
newString = oldString.translate(string.maketrans('0123456789',
                '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09'))