Python 是否将字节数组转换为字符串而不解释字节?

Python 是否将字节数组转换为字符串而不解释字节?,python,bytearray,decode,Python,Bytearray,Decode,我有一个来自PDU编码SMS的GSM日期/时间戳,其格式如下 \x90、x21、x51、x91、x40、x33 格式yy,mm,dd,hh,mm,ss 我已将它们从二进制文件读入字节数组。我想把它们转换成一个字符串,但不做任何解码,我想最终得到一个包含902151914033的字符串。然后我需要反转字符串中的每两个字符 谁能给我一些指点吗? 非常感谢你的意思是你确实想做一些处理!未处理的字节最容易表示为字符 我认为你想要的是以下几点: r = '' for num in array: r

我有一个来自PDU编码SMS的GSM日期/时间戳,其格式如下

\x90、x21、x51、x91、x40、x33

格式yy,mm,dd,hh,mm,ss

我已将它们从二进制文件读入字节数组。我想把它们转换成一个字符串,但不做任何解码,我想最终得到一个包含902151914033的字符串。然后我需要反转字符串中的每两个字符

谁能给我一些指点吗? 非常感谢你的意思是你确实想做一些处理!未处理的字节最容易表示为字符

我认为你想要的是以下几点:

r = ''
for num in array:
    r += '%2X' % num
return r

如果有必要,我相信可以将其封装在匿名函数中。

这应该可以让您开始:

>>> s = b'\x90\x21\x51\x91\x40\x33'
>>> lst = [hex(z)[2:] for z in s]
>>> lst
['90', '21', '51', '91', '40', '33']

>>> string = ''.join(hex(z)[3:1:-1] for z in s)
>>> string
'091215190433'
要转换为十六进制:

hexdata='''.join('%02x'%ord(字节)表示bindata中的字节)

要反转其他每个十六进制字符(如果我理解正确):


hexdata='''.join(“%02x”%ord(byte))[::-1]表示bindata中的byte)

如果在您的问题中,您提供的字符串是包含\和的字节的文本集(ascii),并且您希望将其去掉,则可以使用binascii模块和str.replace:

import binascii
qp = binascii.b2a_qp( bunchabytes )
plainstring = qp.replace( '\\x', '' ).replace( ',', '' )

生成的纯字符串将仅由数字组成。

@Autopulated:修复了第一个问题的答案,
'\x90'
chr(0x90)
而不是
chr(90)
。最新的Python有一个更好的字符串格式:@lpthnc:味道的问题,真的。尽量保持简单易读:-)因此在您的输入中,0x90或“\x90”表示年份(20)09,0x21表示月份12,0x51表示日期15,等等???是什么聪明的头脑设计了这种编码方案?
switcher= dict(
    (n1*16 + n2, n2*16 + n1)
    for n1 in range(16)
    for n2 in range(16)
)

def nibble_switcher(bindata):
    return type(bindata)(switcher[i] for i in bindata)
    # will work with many types, not only bytearray

def nibble_switcher_as_hex_string(bindata):
    return ''.join("%02x" % i for i in nibble_switcher(bindata))