我需要一些帮助,我有一个解析串行数据的python脚本,数据存储在一个字节数组上。
问题是,我有一个数组,其中包含日期时间的字符串表示形式:
bytearray['\x01','\x35','\x40','\x02','\x21','\x016']
表示该数组代表01/35:40 02/21/2016
如何将此数组解析为日期时间 我的意思是我可以毫无问题地做到这一点
datetime.strptime('01:35:40 02/21/16', %H:%M:S %m/%d/%y)
但是我不能从那个十六进制数组中得到怪异的str表示
请帮忙! 谢谢!
答案 0 :(得分:1)
也许它看起来像字符串,但bytearray()
保存数字(字节),你会看到它们的十六进制代码。
看起来像BCD
(Binary-Coded Decimals),您可以使用位操作轻松转换为整数
import datetime
b = bytearray('\x01\x35\x40\x02\x21\x16')
# decode BCD numbers
n = [(x>>4)*10 + (x&15) for x in b]
# add 2000 to year
n[5] += 2000
# create datetime object
#d = datetime.datetime(year=n[5], month=n[3], day=n[4], hour=n[0], minute=n[1], second=n[2])
d = datetime.datetime(n[5], n[3], n[4], n[0], n[1], n[2])
# print it
print(d.strftime('%H:%M:%S %m/%d/%y'))
顺便说一句:如果您没有Python bytearray()
而是普通列表,那么您可以使用ord()
b = ['\x01', '\x35', '\x40', '\x02', '\x21', '\x16']
b = [ord(x) for x in b]
# decode BCD numbers
n = [(x>>4)*10 + (x&15) for x in b]
# ...