如何把码流中的时间转换成我们需要的年、月、日、时、分、
秒??
(1)码流中一般会打一个 40 位的时间,前 16 位代表 mjd 时间,后
24 位代表 BCD 编码的时间,这个时间我们是看不懂的,需要转换。
(2)16 位的 mjd 时间一般代表:年、月、日,后 24 位的 BCD 编码
时间代表:时、分、秒
(3)前 16 位 mjd 时间的解析:
TP_U32 mjd = 0;
TP_U16 year= 0;
TP_U8 month= 0;
TP_U8 day= 0;
TP_U8 week_day= 0;
mjd = ((head[0] << 8) | head[1]);
mjd_to_ymd(mjd, &year, &month, &day, &week_day);
这样转换后,我们直接获取到年、月、日的十进制时间
(4)后 24 位 BCD 编码时间的解析:
hour = head[2];
hour = bcd2integer(&hour, 2, 0);
min = head[3];
min = bcd2integer(&min, 2, 0);
sec = head[4];
sec = bcd2integer(&sec, 2, 0);
BCD 编码是用 4 位 2 进制数来表示 1 位十进制数中的 0-9 这 10 个
数码,因为这里的时、分、秒用 8 位二进制来表示的,所以这里需
要把 8 位二进制转换为 2 位十进制数,调用 bcd2integer(&hour, 2, 0);
所以第二个参数传 2。如果是 16 位 BCD 码,第二个参数传 4
(5)这时离成功已经很近了,但是,这是你会发现,转换完的时间