【发布时间】:2010-07-19 15:50:44
【问题描述】:
我有一个类似“01030009”的字符串,我想获得另一个字符串(因为在 Python 2.x 中我们使用字符串表示字节)newString 会产生这个结果:
for a in newString:
print ord(a)
0
1
0
3
0
0
0
9
谢谢
【问题讨论】:
标签: python
我有一个类似“01030009”的字符串,我想获得另一个字符串(因为在 Python 2.x 中我们使用字符串表示字节)newString 会产生这个结果:
for a in newString:
print ord(a)
0
1
0
3
0
0
0
9
谢谢
【问题讨论】:
标签: python
''.join(chr(int(x)) for x in oldString)
chr 是 ord 的倒数。
【讨论】:
int()。您最多可以达到 36 个:int(x, 36)。
所有“深度内置”的方式都以不同于您想要的方式将字符解释为字节,因为您似乎希望的方式似乎仅限于表示价值小于 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
>>>
那么,为什么您会期望任何形式的“内置”官方支持,即使对于如此非常短的字符串,也只能表示大约十亿分之一的可能字节字符串的千分之五?! “特殊情况”这个词是为比这更频繁地发生远的事情发明的(如果你每秒得到一个随机的 8 字节字符串,那么在你最终得到一个可以在你的方案),当然,更长的字节串会以指数方式加剧这种影响。
有许多“官方”的字节串表示方案,例如base64 和RFC 3548 中指定的朋友...您想要的方案非常明显不是在其中;- )。 那些当然是在 Python 中获得“官方”内置支持的方案。
【讨论】:
品种:
import string
newString = oldString.translate(string.maketrans('0123456789',
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09'))
【讨论】: