如何提取字节数组字符串的小时,分​​钟和第二部分?

时间:2019-10-17 21:11:02

标签: python arrays

我有一个字节数组->字节数组(b'\ x07 \ xe3 \ n \ n \ x04 \ n \ x0f \ x00 \ x00 \ x00 <\ x00')。

它代表日期和时间字段。我可以提取日期,但不能提取带有AM / PM详细信息的时间。如何确定要使用哪种格式的字符?

我正在将struct库与unpack_from方法一起使用。

import struct

byte_range = bytearray(b'\x07\xe3\n\n\x04\n\x0f\x00\x00\x00<\x00')
data = struct.unpack_from('!HBB',byte_range)
print(data)

我也希望从中获得一个小时,一分钟和几秒钟的数据以及AM / PM详细信息。解码的日期时间应为10/10/2019 1:15:00 PM

1 个答案:

答案 0 :(得分:0)

日期时间元组的形状为(year, month, day, hour, minute, second, ...)

查看每个format character的大小,并了解日期时间的每个部分有多大,就可以找出所需的格式字符。

对于特定情况,您已经为日期选择了正确的格式字符:

  • B是一个无符号字符,1个字节,值范围:0到255
  • H是一个无符号的短2字节,值范围:0到65535

您会看到B太小,无法存储年份值,这就是为什么需要H的原因。

现在,您知道时间由3个数字组成,其值范围为0到60,因此B是所有它们所需要的,最后以!HBBBBB格式表示。 / p>

这是结果:

>>> import datetime
>>> import struct
>>> byte_range = bytearray(b'\x07\xe3\n\n\x04\n\x0f\x00\x00\x00<\x00')
>>> date_tuple = struct.unpack_from('!HBBBBB', byte_range)
>>> date = datetime.datetime(*date_tuple)
>>> date.strftime('%Y-%m-%d %H:%M %p')
'2019-10-10 04:10 AM'

table showing the size of the C integer types可能有用