我有一个字符串:“01030009”,我想得到另一个字符串(因为在Python 2.x中我们使用字符串作为字节)newString将产生这个结果:
for a in newString:
print ord(a)
0
1
0
3
0
0
0
9
由于
答案 0 :(得分:8)
''.join(chr(int(x)) for x in oldString)
chr
是ord
的倒数。
答案 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'))