2013-11-22 22 views
1

我正在lua编写一个Wireshark解剖器并试图解码基于时间的协议字段。添加一个大的偏移量os.time {}值

我已经含有的毫秒数两种组分1)

local ref_time = os.time{year=2000, month=1, day=1, hour=0, sec=0} 

和2)

local offset_time = tvbuffer(0:5):bytes() 

5字节(除UINT32范围大)的ByteArray()(以网络字节订单)自ref_time。现在我正在寻找一个人类可读的日期。我不知道这将是如此艰难,但第一,看来我不能简单地添加一个偏移量到一个os.time值和第二个偏移量超过Int32范围...和我测试的大多数函数似乎截断超过输入值。

关于我如何获得日期的任何想法从ref_timeoffset_time

非常感谢!

回答

2

由于ref_time为秒,offset_time以毫秒为单位,只要尝试:

os.date("%c",ref_time+offset_time/1000) 

我认为offset_time是一个数字。如果不是,只需使用算术重构它。请记住,Lua使用双数来表示数字,因此一个5字节的整数很合适。

+0

谢谢。使用os.date确实有帮助......但offset_time是一个(十六进制)ByteArray ..内部函数不适用于5字节整数(仅4和8),并且不支持算术运算。 **尝试对用户数据值执行算术运算** – Hhut

+2

@Hhut,如果您可以从'offset_time'中提取单个字节,只需执行像'b0 + 256 *(b1 + 256 *(b2 + 256 *( b3 + 256 * b4)))'或以其他顺序。 – lhf

+0

谢谢......我会设法做到这一点,我只需要将毫秒数转换为秒数转换......现在不要为什么,但我的lua或wireshark api仅限于32位。 '局部高=块(0,1):UINT()* 4294967 - (1 << 32)/ 1000 \t \t \t \t \t \t \t局部低=块(1,4):UINT()/ 1000 \t \t \t \t \t \t \t local tval = high + low' – Hhut