代码之家  ›  专栏  ›  技术社区  ›  Juanjo Conti

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

  •  2
  • Juanjo Conti  · 技术社区  · 15 年前

    我有一个类似“01030009”的字符串,我想得到另一个字符串(因为在python 2.x中,我们使用字符串表示字节)newstring,它将产生以下结果:

    for a in newString:
        print ord(a)
    
    0
    1
    0
    3
    0
    0
    0
    9
    

    谢谢

    3 回复  |  直到 15 年前
        1
  •  8
  •   Amber    15 年前
    ''.join(chr(int(x)) for x in oldString)
    

    chr 是的反义词 ord .

        2
  •  2
  •   Alex Martelli    15 年前

    所有“深入内置”的方式都以不同于您想要的方式将字符解释为字节,因为您看起来想要的方式似乎仅限于表示值小于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中获得“官方”内置支持的方案。

        3
  •  2
  •   Marius Gedminas    15 年前

    多样性:

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