将字节数组转换为字符串而不解释字节?
我具有从PDU编码SMS一个GSM日期/时间戳它被格式化为这样将字节数组转换为字符串而不解释字节?
\ X90,\ X21,\ X51,\ X91,\ X40,\ X33
格式YY,毫米, dd,hh,mm,ss
我已经将它们从二进制文件读入字节数组中。我想将它们转换为一个字符串,但是没有做任何解码,我想以一个包含902151914033的字符串结尾。然后我需要反转字符串中的每个2个字符。
任何人都可以给我一些指针吗? 很多谢谢
这应该让你开始:
>>> 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(byte) for byte in bindata)
为了扭转每隔十六进制字符(如果我理解正确):
hexdata = ''.join(('%02x' % ord(byte))[::-1] for byte in bindata)
最新的Python有一个更好的(IMO)字符串格式:http://www.python.org/dev/peps/pep-3101/ – 2009-12-16 19:45:13
@lpthnc:味道的问题,真的。尽可能保持简单和可读性:-) – RedGlyph 2009-12-16 19:46:53
如果在你身上R第,你提供的字符串是字面组的字节(如ASCII)包括\和,和要剥离出来则可以使用binascii模块和str.replace:
import binascii
qp = binascii.b2a_qp(bunchabytes)
plainstring = qp.replace('\\x', '').replace(',', '')
所得平原字符串将只包含数字。
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))
因此,在您的输入中,0x90或'\ x90'代表年份(20)09,0x21代表月份12,0x51代表第15天等等。什么聪明的想法设计了编码方案? – 2009-12-16 21:53:14