sfa*_*tor 3 perl datetime decode binaryfiles
我有一个我正在解码的固定宽度二进制文件.其中一个字段是时间戳.它长5个字节,格式SS SS SS SS MS.前四个字节表示数据2000/01/01 00:00:00的秒数,该MS字节通过表示秒内10ms间隔倍数(值范围为0到99)提供更高的准确度.
该字段的编码类型是二进制.例如:答案时间是2008-4-28 14:42:51.15,字段填充0F A8 9E EB 0F.
如何在Perl中解析二进制数据并将其转换为时间戳格式?
该Time::Piece模块适用于此目的,它自Perl 5版本10以来一直是核心模块,因此不需要安装.
此外,unpack是从字符串中提取数据字段的最方便的方法.
它看起来像这样.我已经习惯于pack创建你描述的文件内容,我不得不将小数秒附加到结果中,因为Time::Piece它不支持部分秒.
use strict;
use warnings;
use Time::Piece;
my $data = pack 'H*', '0FA89EEB0F';
print decode_timestamp($data), "\n";
sub decode_timestamp {
my ($seconds, $ms) = unpack 'N C', shift;
my $base = Time::Piece->strptime('2000-01-01', '%Y-%m-%d');
($base + $seconds)->strftime('%Y-%m-%d %H:%M:%S') . sprintf '.%02d', $ms;
}
Run Code Online (Sandbox Code Playgroud)
产量
2008-04-28 14:42:51.15
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
586 次 |
| 最近记录: |