如何提取bytearray字符串的时、分和秒部分?

2024-10-04 15:28:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个备用阵列-->;字节数组(b'\x07\x03\n\n\x04\n\x0f\x00\x00\x00<\x00’)

它表示日期和时间字段。我可以提取日期,但无法提取上午/下午细节的时间。如何决定使用哪种格式的字符

我将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)

我还期待着一个小时,分钟和秒的数据,从它与上午/下午的细节以及。解码的日期时间应该是10/10/2019 1:15:00 PM


Tags: fromgtdata字节时间range数组byte
1条回答
网友
1楼 · 发布于 2024-10-04 15:28:26

datetime元组的形状是(year, month, day, hour, minute, second, ...)

查看每个format character的大小并知道datetime的每个部分有多大,您就可以知道需要什么格式的字符

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

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

如您所见,B太小,无法存储该年的值,这就是您需要H的原因

现在,您知道时间是由3个数字组成的,它们的值范围是0到60,因此B是所有这些数字所需要的,最终的格式是!HBBBBB

结果如下:

>>> 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可能有用

相关问题 更多 >

    热门问题