📄 compress.c
字号:
#include "dtm_v3.h"
#include "dtm.h"
#include "externdef.h"
#include <stdio.h>
// BIEF文件静态信息的OFFSET
#define OFF_BASEINFO_CARDID 0 // 持卡人编号
#define OFF_BASEINFO_NAME 4 // 持卡人姓名
#define OFF_BASEINFO_CARDTYPE 132 // 卡类型
#define OFF_BASEINFO_MAXITEM 133 // 日志总条数
#define OFF_BASEINFO_FINGERSCORE1 135 // 指纹一评分
#define OFF_BASEINFO_FINGERLENGTH1 136 // 指纹一长度
#define OFF_BASEINFO_FINGERSCORE2 138 // 指纹二评分
#define OFF_BASEINFO_FINGERLENGTH2 139 // 指纹二长度
#define OFF_BASEINFO_FINGERMB1 141 // 指纹模板一
#define OFF_BASEINFO_FINGERMB2 541 // 指纹模板二
#define OFF_BASEINFO_CRC 941 // 校验
//********************************************************************************
//函数名:void ICUncompressBIEFBaseInfo(_BYTE *cpBuf,SBIEF_1 *sBaseInfo)
//功 能:将cpBuf中存放的BIEF文件BaseInfo的信息解码到sBaseInfo结构类型中
//参 数:cpBuf:待解码的BIEF静态信息
// sBaseInfo:解码后的BIEF静态信息
//返回值:无;
//*******************************************************************************
void ICUncompressBIEFBaseInfo(_BYTE *cpBuf,SBIEF_1 *sBaseInfo)
{
_WORD i;
_DWORD dwTmp;
_BYTE *cpPos;
cpPos = cpBuf;
dwTmp = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 持卡人编号
cpPos += sizeof(_DWORD);
sBaseInfo->dwCardID = dwTmp;
for (i=0;i<128;i++) // 持卡人姓名
sBaseInfo->cpName[i] = cpPos[i];
cpPos += 128;
sBaseInfo->cCardType = *cpPos; // 卡类型
cpPos += sizeof(_BYTE);
sBaseInfo->wMaxItem = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 日志总条数
cpPos += sizeof(_WORD);
sBaseInfo->cFingerScore1 = *cpPos; // 指纹一评分
cpPos += sizeof(_BYTE);
sBaseInfo->wFingerLength1 = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 指纹一长度
cpPos += sizeof(_WORD);
sBaseInfo->cFingerScore2 = *cpPos; // 指纹二评分
cpPos += sizeof(_BYTE);
sBaseInfo->wFingerLength2 = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 指纹二长度
cpPos += sizeof(_WORD);
for (i=0;i<LENOFMB-1;i++) // 第二枚指纹
sBaseInfo->cpFingerMB1[i] = cpPos[i];
cpPos += LENOFMB-1;
for (i=0;i<LENOFMB-1;i++) // 第一枚指纹
sBaseInfo->cpFingerMB2[i] = cpPos[i];
cpPos += LENOFMB-1;
sBaseInfo->cCrc = *cpPos; // 校验
}
//********************************************************************************
//函数名:void ICCompressBIEFBaseInfo(SBIEF_1 *sBaseInfo,_BYTE *cpBuf)
//功 能:将sBaseInfo结构类型中存放的BIEF文件BaseInfo的信息解码到cpBuf中
//参 数:cpBuf:解码后的BIEF静态信息
// sBaseInfo:待解码的BIEF静态信息
//返回值:无;
//*******************************************************************************
void ICCompressBIEFBaseInfo(SBIEF_1 *sBaseInfo,_BYTE *cpBuf)
{
_WORD i;
_BYTE *cpPos;
cpPos =cpBuf;
LongToHEX(sBaseInfo->dwCardID,cpPos,sizeof(_DWORD)); // 持卡人编号
cpPos += sizeof(_DWORD);
for (i=0;i<128;i++) // 持卡人姓名
*(cpPos+i) = sBaseInfo->cpName[i] ;
cpPos += 128;
*cpPos = sBaseInfo->cCardType ; // 卡类型
cpPos += sizeof(_BYTE);
LongToHEX(sBaseInfo->wMaxItem,cpPos,sizeof(_WORD)); // 日志总条数
cpPos += sizeof(_WORD);
*cpPos = sBaseInfo->cFingerScore1; // 指纹一评分
cpPos += sizeof(_BYTE);
LongToHEX(sBaseInfo->wFingerLength1,cpPos,sizeof(_WORD)); // 指纹一长度
cpPos += sizeof(_WORD);
*cpPos = sBaseInfo->cFingerScore2; // 指纹二评分
cpPos += sizeof(_BYTE);
LongToHEX(sBaseInfo->wFingerLength2,cpPos,sizeof(_WORD)); // 指纹二长度
cpPos += sizeof(_WORD);
for (i=0;i<LENOFMB-1;i++) // 第二枚指纹
*(cpPos+i) = sBaseInfo->cpFingerMB1[i];
cpPos += LENOFMB-1;
for (i=0;i<LENOFMB-1;i++) // 第一枚指纹
*(cpPos+i) = sBaseInfo->cpFingerMB2[i];
cpPos += LENOFMB-1;
*cpPos = sBaseInfo->cCrc; // 校验
}
//********************************************************************************
//函数名:void ICUncompressBIEFTrainInfo(_BYTE *cpBuf,SBIEF_2 *sTrainInfo)
//功 能:将cpBuf中存放的BIEF文件TrainInfo的信息解码到sBaseInfo结构类型中
//参 数:cpBuf:待解码的BIEF训练信息
// sTrainInfo:解码后的BIEF训练信息
//返回值:无;
//*******************************************************************************
void ICUncompressBIEFTrainInfo(_BYTE *cpBuf,SBIEF_2 *sTrainInfo)
{
sTrainInfo->dwDayFieldTotalTime = ByteToLong(cpBuf,4,ISHEX); // 日道训累加时间
sTrainInfo->dwDayFieldTotalMile = ByteToLong(cpBuf+4,4,ISHEX); // 日道训累加里程
sTrainInfo->dwDayRoadTotalTime = ByteToLong(cpBuf+8,4,ISHEX); // 日场训累加时间
sTrainInfo->dwDayRoadTotalMile = ByteToLong(cpBuf+12,4,ISHEX); // 日场训累加里程
sTrainInfo->dwNightFieldTotalTime = ByteToLong(cpBuf+16,4,ISHEX); // 夜道训累加时间
sTrainInfo->dwNightFieldTotalMile = ByteToLong(cpBuf+20,4,ISHEX); // 夜道训累加里程
sTrainInfo->dwNightRoadTotalTime = ByteToLong(cpBuf+24,4,ISHEX); // 夜场训累加时间
sTrainInfo->dwNightRoadTotalMile = ByteToLong(cpBuf+28,4,ISHEX); // 夜场训累加里程
sTrainInfo->wCurrentItem = ByteToLong(cpBuf+32,2,ISHEX); // 当前条数
sTrainInfo->cCrc = cpBuf[34]; // 校验
}
//********************************************************************************
//函数名:void ICCompressBIEFTrainInfo(SBIEF_2 *sTrainInfo,_BYTE *cpBuf)
//功 能:将sBaseInfo结构类型中存放的BIEF文件TrainInfo的信息解码到cpBuf中
//参 数:cpBuf:解码后的BIEF训练信息
// sTrainInfo:待解码的BIEF训练信息
//返回值:无;
//*******************************************************************************
void ICCompressBIEFTrainInfo(SBIEF_2 *sTrainInfo,_BYTE *cpBuf)
{
LongToHEX(sTrainInfo->dwDayFieldTotalTime,cpBuf,4); // 日道训累加时间
LongToHEX(sTrainInfo->dwDayFieldTotalMile,cpBuf+4,4); // 日道训累加里程
LongToHEX(sTrainInfo->dwDayRoadTotalTime,cpBuf+8,4); // 日场训累加时间
LongToHEX(sTrainInfo->dwDayRoadTotalMile,cpBuf+12,4); // 日场训累加里程
LongToHEX(sTrainInfo->dwNightFieldTotalTime,cpBuf+16,4); // 夜道训累加时间
LongToHEX(sTrainInfo->dwNightFieldTotalMile,cpBuf+20,4); // 夜道训累加里程
LongToHEX(sTrainInfo->dwNightRoadTotalTime,cpBuf+24,4); // 夜场训累加时间
LongToHEX(sTrainInfo->dwNightRoadTotalMile,cpBuf+28,4); // 夜场训累加里程
LongToHEX(sTrainInfo->wCurrentItem,cpBuf+32,2); // 当前条数
cpBuf[34] = sTrainInfo->cCrc ; // 校验
}
//********************************************************************************
//函数名:void ICUncompressBIEFTimeInfo(_BYTE *cpBuf,SBIEF_3 *sTimeInfo)
//功 能:将cpBuf中存放的BIEF文件TimeInfo的信息解码到sBaseInfo结构类型中
//参 数:cpBuf:待解码的BIEF买钟信息
// sTimeInfo:解码后的BIEF买钟信息
//返回值:无;
//*******************************************************************************
void ICUncompressBIEFTimeInfo(_BYTE *cpBuf,SBIEF_3 *sTimeInfo)
{
sTimeInfo->wBuyTime = cpBuf[0]*256+cpBuf[1]; // 买钟总时间
sTimeInfo->wBuyDayFieldTime = cpBuf[2]*256+cpBuf[3]; // 买钟日场训时间
sTimeInfo->wBuyDayRoadTime = cpBuf[4]*256+cpBuf[5]; // 买钟日路训时间
sTimeInfo->wBuyNightFieldTime = cpBuf[6]*256+cpBuf[7]; // 买钟夜场训时间
sTimeInfo->wBuyNightRoadTime = cpBuf[8]*256+cpBuf[9]; // 买钟夜路训时间
sTimeInfo->cCrc = cpBuf[10]; // 校验
}
//********************************************************************************
//函数名:void ICCompressBIEFTimeInfo(SBIEF_3 *sTimeInfo,_BYTE *cpBuf)
//功 能:将sBaseInfo结构类型中存放的BIEF文件TimeInfo的信息解码到cpBuf中
//参 数:cpBuf:解码后的BIEF买钟信息
// sTimeInfo:待解码的BIEF买钟信息
//返回值:无;
//*******************************************************************************
void ICCompressBIEFTimeInfo(SBIEF_3 *sTimeInfo,_BYTE *cpBuf)
{
LongToHEX(sTimeInfo->wBuyTime,cpBuf,2); // 买钟总时间
LongToHEX(sTimeInfo->wBuyDayFieldTime,cpBuf+2,2); // 买钟日场训时间
LongToHEX(sTimeInfo->wBuyDayRoadTime,cpBuf+4,2); // 买钟日路训时间
LongToHEX(sTimeInfo->wBuyNightFieldTime,cpBuf+6,2); // 买钟夜场训时间
LongToHEX(sTimeInfo->wBuyNightRoadTime,cpBuf+8,2); // 买钟夜路训时间
cpBuf[10] = sTimeInfo->cCrc ; // 校验
}
// 将结构类型压缩到数组中
void CompressCSI(struct StruCSI *sCSI,_BYTE *cpBuf)
{
cpBuf[0] = sCSI->cStatus; // 手持机的当前状态
cpBuf[1] = sCSI->cCurDCB; // 当前DCB序号,仅在训练状态下有效
cpBuf[2] = sCSI->cReserve; // 保留数据
cpBuf[3] = sCSI->cCrc; // 校验和
}
// 将数组解压缩到结构类型中
void UncompressCSI(_BYTE *cpBuf,struct StruCSI *sCSI)
{
sCSI->cStatus = cpBuf[0]; // 手持机的当前状态
sCSI->cCurDCB = cpBuf[1]; // 当前DCB序号,仅在训练状态下有效
sCSI->cReserve = cpBuf[2]; // 保留数据
sCSI->cCrc = cpBuf[3]; // 校验和
}
// 将结构类型压缩到数组中
void CompressCDTI(struct StruCDTI *sCDTI,_BYTE *cpBuf)
{
_BYTE * cpPos;
cpPos = cpBuf;
*cpPos = sCDTI->cSeq; // DCBT表的序号
cpPos += sizeof(_BYTE);
LongToHEX(sCDTI->wDayRoadValidTime,cpPos,sizeof(_WORD)); // 日路训有效时间
cpPos += sizeof(_WORD);
LongToHEX(sCDTI->dwDayRoadValidMile,cpPos,sizeof(_DWORD)); // 日路训有效里程
cpPos += sizeof(_DWORD);
LongToHEX(sCDTI->wNightRoadValidTime,cpPos,sizeof(_WORD)); // 夜路训有效时间
cpPos += sizeof(_WORD);
LongToHEX(sCDTI->dwNightRoadValidMile,cpPos,sizeof(_DWORD)); // 夜路训有效里程
cpPos += sizeof(_DWORD);
LongToHEX(sCDTI->wDayFieldValidTime,cpPos,sizeof(_WORD)); // 日场训有效时间
cpPos += sizeof(_WORD);
LongToHEX(sCDTI->dwDayFieldValidMile,cpPos,sizeof(_DWORD)); // 日场训有效里程
cpPos += sizeof(_DWORD);
LongToHEX(sCDTI->wNightFieldValidTime,cpPos,sizeof(_WORD)); // 夜场训有效时间
cpPos += sizeof(_WORD);
LongToHEX(sCDTI->dwNightFieldValidMile,cpPos,sizeof(_DWORD)); // 夜场训有效里程
cpPos += sizeof(_DWORD);
LongToHEX(sCDTI->wDayRoadCurTime,cpPos,sizeof(_WORD)); // 日路训当前时间
cpPos += sizeof(_WORD);
LongToHEX(sCDTI->dwDayRoadCurMile,cpPos,sizeof(_DWORD)); // 日路训当前里程
cpPos += sizeof(_DWORD);
LongToHEX(sCDTI->wNightRoadCurTime,cpPos,sizeof(_WORD)); // 夜路训当前时间
cpPos += sizeof(_WORD);
LongToHEX(sCDTI->dwNightRoadCurMile,cpPos,sizeof(_DWORD)); // 夜路训当前里程
cpPos += sizeof(_DWORD);
LongToHEX(sCDTI->wDayFieldCurTime,cpPos,sizeof(_WORD)); // 日场训当前时间
cpPos += sizeof(_WORD);
LongToHEX(sCDTI->dwDayFieldCurMile,cpPos,sizeof(_DWORD)); // 日场训当前里程
cpPos += sizeof(_DWORD);
LongToHEX(sCDTI->wNightFieldCurTime,cpPos,sizeof(_WORD)); // 夜场训当前时间
cpPos += sizeof(_WORD);
LongToHEX(sCDTI->dwNightFieldCurMile,cpPos,sizeof(_DWORD)); // 夜场训当前里程
cpPos += sizeof(_DWORD);
*cpPos = sCDTI->cCycleSecond; // 未区分训练类型的时间(秒)
cpPos += sizeof(_BYTE);
LongToHEX(sCDTI->wCyclePluse,cpPos,sizeof(_WORD)); // 未区分训练类型的脉冲数
cpPos += sizeof(_WORD);
*cpPos = sCDTI->cCycleStopTime; // 在未区分训练类型时间内的停止次数
cpPos += sizeof(_BYTE);
*cpPos = sCDTI->cCycleMaxRunTime; // 在未区分训练类型时间内连续运行的最大时间
cpPos += sizeof(_BYTE);
LongToHEX(sCDTI->wCycleMaxRunPluse,cpPos,sizeof(_WORD)); // 在未区分训练类型时间内连续运行的最大脉冲数
cpPos += sizeof(_WORD);
*cpPos = sCDTI->cTrainType; // 前面若干次的训练类型
cpPos += sizeof(_BYTE);
*cpPos = sCDTI->cUpdateCount; // 更新计数
cpPos += sizeof(_BYTE);
*cpPos = sCDTI->cCrc; // 校验
}
// 将数组解压缩到结构类型中
void UncompressCDTI(_BYTE *cpBuf,struct StruCDTI *sCDTI)
{
_BYTE *cpPos;
cpPos = cpBuf;
sCDTI->cSeq = *cpPos; // DCBT表的序号
cpPos += sizeof(_BYTE);
sCDTI->wDayRoadValidTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 日路训有效时间
cpPos += sizeof(_WORD);
sCDTI->dwDayRoadValidMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 日路训有效里程
cpPos += sizeof(_DWORD);
sCDTI->wNightRoadValidTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 夜路训有效时间
cpPos += sizeof(_WORD);
sCDTI->dwNightRoadValidMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 夜路训有效里程
cpPos += sizeof(_DWORD);
sCDTI->wDayFieldValidTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 日场训有效时间
cpPos += sizeof(_WORD);
sCDTI->dwDayFieldValidMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 日场训有效里程
cpPos += sizeof(_DWORD);
sCDTI->wNightFieldValidTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 夜场训有效时间
cpPos += sizeof(_WORD);
sCDTI->dwNightFieldValidMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 夜场训有效里程
cpPos += sizeof(_DWORD);
sCDTI->wDayRoadCurTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 日路训当前时间
cpPos += sizeof(_WORD);
sCDTI->dwDayRoadCurMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 日路训当前里程
cpPos += sizeof(_DWORD);
sCDTI->wNightRoadCurTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 夜路训当前时间
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -