>我正在尝试从考勤时钟设备(设备名称=TA8020(通过UDP接收的二进制数据中解压缩以下结构:
typedef struct _AttLog_{
Int PIN; //U16 PIN, user number
char verified;// verifying method
time_t time_second; //time, time code is user-defined time code.
char status;// attendance state
}TAttLog, *PAttLog;
尝试像这样解压缩数据:
uid, state, timestamp, space = unpack( '24s1s4s11s', attendancedata.ljust(40)[:40] )
print "%s, %s, %s, %s" % (uid, state, space, decode_time( int( reverseHex( timestamp.encode('hex') ), 16 ) ) )
产生以下结果:
5, , , 2016-02-13 11:55:36
uid 和时间戳是正确的,但我无法获得 char 验证和 char 状态的正确值,因为您可以看到像上面这样解压缩结构,它们返回为空。
尝试解压缩字符状态和
字符时,如下所示:state = unpack('>3c',attendancedata[17:20])
space = unpack('>2c',attendancedata[21:23])
收益 率:
statem ('x00', 'x00', 'x00')
statev 0
每次都不是正确的值。(通过查看考勤设备的Web界面日志进行验证(
像这样开箱:
oneSet = unpack('24s1s4s11s',attendancedata.ljust(40)[:40])
收益 率: ('5
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00','\x01','h\x1b\xe0\x1e','\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x00'(API 文档提供了如下详细信息:
只有读取命令可用于读取所有出勤日志。考勤日志可以在长或短模式下压缩。压缩方法(如果现在正在读取char *Buffer,则手将在第一个字节处(为:前2个字节用于存储用户PIN(U 16 PIN(,第三个字节的前三个位用于存储验证状态。第四位和第五位是存储验证方法。第六位是存储短时间符号和长时间符号。如果是短时间格式,则时间值为第三个字节和第三个字节的最后两位加上最近的长时间值(因此,时间格式存储为前一个长时间值的错误注册值(。然后根据时间编码模式(参考用户自定义编码模式(进行解码,得到正确的时间。
任何帮助将不胜感激。
我想通了:
state = unpack('c',attendancedata[29:30])
是我需要的值。