📄 compress.c
字号:
cpPos += sizeof(_WORD);
sCDTI->dwNightRoadCurMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 夜路训当前里程
cpPos += sizeof(_DWORD);
sCDTI->wDayFieldCurTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 日场训当前时间
cpPos += sizeof(_WORD);
sCDTI->dwDayFieldCurMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 日场训当前里程
cpPos += sizeof(_DWORD);
sCDTI->wNightFieldCurTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 夜场训当前时间
cpPos += sizeof(_WORD);
sCDTI->dwNightFieldCurMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 夜场训当前里程
cpPos += sizeof(_DWORD);
sCDTI->cCycleSecond = *cpPos; // 未区分训练类型的时间(秒)
cpPos += sizeof(_BYTE);
sCDTI->wCyclePluse = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 未区分训练类型的脉冲数
cpPos += sizeof(_WORD);
sCDTI->cCycleStopTime = *cpPos; // 在未区分训练类型时间内的停止次数
cpPos += sizeof(_BYTE);
sCDTI->cCycleMaxRunTime = *cpPos; // 在未区分训练类型时间内连续运行的最大时间
cpPos += sizeof(_BYTE);
sCDTI->wCycleMaxRunPluse = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 在未区分训练类型时间内连续运行的最大脉冲数
cpPos += sizeof(_WORD);
sCDTI->cTrainType = *cpPos; // 前面若干次的训练类型
cpPos += sizeof(_BYTE);
sCDTI->cUpdateCount = *cpPos; // 更新计数
cpPos += sizeof(_BYTE);
sCDTI->cCrc = *cpPos; // 校验
}
// 将结构类型压缩到数组中
void CompressDCB(struct StruDCB *sDCB,_BYTE *cpBuf)
{
_BYTE * cpPos;
int i;
cpPos = cpBuf;
*cpPos = sDCB->cFlag; // 使用标记,0=空闲,1=使用
cpPos += sizeof(_BYTE);
LongToHEX(sDCB->dwCardID,cpPos,sizeof(_DWORD)); // 卡号
cpPos += sizeof(_DWORD);
for (i=0;i<128;i++)
*(cpPos+i) = sDCB->cpName[i]; // 字模
cpPos += 128;
LongToHEX(sDCB->wBuyTime,cpPos,sizeof(_WORD)); // 买钟总时间
cpPos += sizeof(_WORD);
LongToHEX(sDCB->wBuyDayRoadTime,cpPos,sizeof(_WORD)); // 买钟日路训时间
cpPos += sizeof(_WORD);
LongToHEX(sDCB->wBuyDayFieldTime,cpPos,sizeof(_WORD)); // 买钟日场训时间
cpPos += sizeof(_WORD);
LongToHEX(sDCB->wBuyNightRoadTime,cpPos,sizeof(_WORD)); // 买钟夜路训时间
cpPos += sizeof(_WORD);
LongToHEX(sDCB->wBuyNightFieldTime,cpPos,sizeof(_WORD)); // 买钟夜场训时间
cpPos += sizeof(_WORD);
*cpPos = sDCB->cYear; // 签到年份
cpPos += sizeof(_BYTE);
*cpPos = sDCB->cMonth; // 签到月份
cpPos += sizeof(_BYTE);
*cpPos = sDCB->cDay; // 签到日
cpPos += sizeof(_BYTE);
*cpPos = sDCB->cHour; // 签到小时
cpPos += sizeof(_BYTE);
*cpPos = sDCB->cMinter; // 签到分钟
cpPos += sizeof(_BYTE);
LongToHEX(sDCB->wDayRoadValidTime,cpPos,sizeof(_WORD)); // 日路训有效时间
cpPos += sizeof(_WORD);
LongToHEX(sDCB->dwDayRoadValidMile,cpPos,sizeof(_DWORD)); // 日路训有效里程
cpPos += sizeof(_DWORD);
LongToHEX(sDCB->wNightRoadValidTime,cpPos,sizeof(_WORD)); // 夜路训有效时间
cpPos += sizeof(_WORD);
LongToHEX(sDCB->dwNightRoadValidMile,cpPos,sizeof(_DWORD)); // 夜路训有效里程
cpPos += sizeof(_DWORD);
LongToHEX(sDCB->wDayFieldValidTime,cpPos,sizeof(_WORD)); // 日场训有效时间
cpPos += sizeof(_WORD);
LongToHEX(sDCB->dwDayFieldValidMile,cpPos,sizeof(_DWORD)); // 日场训有效里程
cpPos += sizeof(_DWORD);
LongToHEX(sDCB->wNightFieldValidTime,cpPos,sizeof(_WORD)); // 夜场训有效时间
cpPos += sizeof(_WORD);
LongToHEX(sDCB->dwNightFieldValidMile,cpPos,sizeof(_DWORD)); // 夜场训有效里程
cpPos += sizeof(_DWORD);
LongToHEX(sDCB->wDayRoadCurTime,cpPos,sizeof(_WORD)); // 日路训当前时间
cpPos += sizeof(_WORD);
LongToHEX(sDCB->dwDayRoadCurMile,cpPos,sizeof(_DWORD)); // 日路训当前里程
cpPos += sizeof(_DWORD);
LongToHEX(sDCB->wNightRoadCurTime,cpPos,sizeof(_WORD)); // 夜路训当前时间
cpPos += sizeof(_WORD);
LongToHEX(sDCB->dwNightRoadCurMile,cpPos,sizeof(_DWORD)); // 夜路训当前里程
cpPos += sizeof(_DWORD);
LongToHEX(sDCB->wDayFieldCurTime,cpPos,sizeof(_WORD)); // 日场训当前时间
cpPos += sizeof(_WORD);
LongToHEX(sDCB->dwDayFieldCurMile,cpPos,sizeof(_DWORD)); // 日场训当前里程
cpPos += sizeof(_DWORD);
LongToHEX(sDCB->wNightFieldCurTime,cpPos,sizeof(_WORD)); // 夜场训当前时间
cpPos += sizeof(_WORD);
LongToHEX(sDCB->dwNightFieldCurMile,cpPos,sizeof(_DWORD)); // 夜场训当前里程
cpPos += sizeof(_DWORD);
*cpPos = sDCB->cCycleSecond; // 未区分训练类型的时间(秒)
cpPos += sizeof(_BYTE);
LongToHEX(sDCB->wCyclePluse,cpPos,sizeof(_WORD)); // 未区分训练类型的脉冲数
cpPos += sizeof(_WORD);
*cpPos = sDCB->cCycleStopTime; // 在未区分训练类型时间内的停止次数
cpPos += sizeof(_BYTE);
*cpPos = sDCB->cCycleMaxRunTime; // 在未区分训练类型时间内连续运行的最大时间
cpPos += sizeof(_BYTE);
LongToHEX(sDCB->wCycleMaxRunPluse,cpPos,sizeof(_WORD)); // 在未区分训练类型时间内连续运行的最大脉冲数
cpPos += sizeof(_WORD);
*cpPos = sDCB->cTrainType; // 前面若干次的训练类型
cpPos += sizeof(_BYTE);
*cpPos = sDCB->cFingerScore1; // 指纹模板1,评分
cpPos += sizeof(_BYTE);
*cpPos = sDCB->cFingerScore2; // 指纹模板2,评分
cpPos += sizeof(_BYTE);
LongToHEX(sDCB->wFingerLength1,cpPos,sizeof(_WORD)); // 指纹模板1,长度
cpPos += sizeof(_WORD);
LongToHEX(sDCB->wFingerLength2,cpPos,sizeof(_WORD)); // 指纹模板2,长度
cpPos += sizeof(_WORD);
*cpPos = sDCB->cCrc; // 上述所有信息的校验和
}
// 将数组解压缩到结构类型中
void UncompressDCB(_BYTE *cpBuf,struct StruDCB *sDCB)
{
_BYTE *cpPos;
int i;
cpPos = cpBuf;
sDCB->cFlag = *cpPos; // 使用标记,0=空闲,1=使用
cpPos += sizeof(_BYTE);
sDCB->dwCardID = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 卡号
cpPos += sizeof(_DWORD);
for (i=0;i<128;i++)
sDCB->cpName[i] = *(cpPos+i); // 字模
cpPos += 128;
sDCB->wBuyTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 买钟总时间
cpPos += sizeof(_WORD);
sDCB->wBuyDayRoadTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 买钟日路训时间
cpPos += sizeof(_WORD);
sDCB->wBuyDayFieldTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 买钟日场训时间
cpPos += sizeof(_WORD);
sDCB->wBuyNightRoadTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 买钟夜路训时间
cpPos += sizeof(_WORD);
sDCB->wBuyNightFieldTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 买钟夜场训时间
cpPos += sizeof(_WORD);
sDCB->cYear = *cpPos; // 签到年份
cpPos += sizeof(_BYTE);
sDCB->cMonth = *cpPos; // 签到月份
cpPos += sizeof(_BYTE);
sDCB->cDay = *cpPos; // 签到日
cpPos += sizeof(_BYTE);
sDCB->cHour = *cpPos; // 签到小时
cpPos += sizeof(_BYTE);
sDCB->cMinter = *cpPos; // 签到分钟
cpPos += sizeof(_BYTE);
sDCB->wDayRoadValidTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 日路训有效时间
cpPos += sizeof(_WORD);
sDCB->dwDayRoadValidMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 日路训有效里程
cpPos += sizeof(_DWORD);
sDCB->wNightRoadValidTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 夜路训有效时间
cpPos += sizeof(_WORD);
sDCB->dwNightRoadValidMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 夜路训有效里程
cpPos += sizeof(_DWORD);
sDCB->wDayFieldValidTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 日场训有效时间
cpPos += sizeof(_WORD);
sDCB->dwDayFieldValidMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 日场训有效里程
cpPos += sizeof(_DWORD);
sDCB->wNightFieldValidTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 夜场训有效时间
cpPos += sizeof(_WORD);
sDCB->dwNightFieldValidMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 夜场训有效里程
cpPos += sizeof(_DWORD);
sDCB->wDayRoadCurTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 日路训当前时间
cpPos += sizeof(_WORD);
sDCB->dwDayRoadCurMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 日路训当前里程
cpPos += sizeof(_DWORD);
sDCB->wNightRoadCurTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 夜路训当前时间
cpPos += sizeof(_WORD);
sDCB->dwNightRoadCurMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 夜路训当前里程
cpPos += sizeof(_DWORD);
sDCB->wDayFieldCurTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 日场训当前时间
cpPos += sizeof(_WORD);
sDCB->dwDayFieldCurMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 日场训当前里程
cpPos += sizeof(_DWORD);
sDCB->wNightFieldCurTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 夜场训当前时间
cpPos += sizeof(_WORD);
sDCB->dwNightFieldCurMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX); // 夜场训当前里程
cpPos += sizeof(_DWORD);
sDCB->cCycleSecond = *cpPos; // 未区分训练类型的时间(秒)
cpPos += sizeof(_BYTE);
sDCB->wCyclePluse = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 未区分训练类型的脉冲数
cpPos += sizeof(_WORD);
sDCB->cCycleStopTime = *cpPos; // 在未区分训练类型时间内的停止次数
cpPos += sizeof(_BYTE);
sDCB->cCycleMaxRunTime = *cpPos; // 在未区分训练类型时间内连续运行的最大时间
cpPos += sizeof(_BYTE);
sDCB->wCycleMaxRunPluse = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 在未区分训练类型时间内连续运行的最大脉冲数
cpPos += sizeof(_WORD);
sDCB->cTrainType = *cpPos; // 前面若干次的训练类型
cpPos += sizeof(_BYTE);
sDCB->cFingerScore1 = *cpPos; // 指纹模板1,评分
cpPos += sizeof(_BYTE);
sDCB->cFingerScore2 = *cpPos; // 指纹模板2,评分
cpPos += sizeof(_BYTE);
sDCB->wFingerLength1 = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 指纹模板1,长度
cpPos += sizeof(_WORD);
sDCB->wFingerLength2 = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // 指纹模板2,长度
cpPos += sizeof(_WORD);
sDCB->cCrc = *cpPos; // 上述所有信息的校验和
}
// 将结构类型压缩到数组中
void CompressSPB(struct StruSPB *sSPB,_BYTE *cpBuf)
{
_BYTE * cpPos;
int i;
cpPos = cpBuf;
LongToHEX(sSPB->wKParm,cpPos,sizeof(_WORD)); // K系数
cpPos += sizeof(_WORD);
*cpPos = sSPB->cVerifyCycle ; // 验证指纹的时间周期
cpPos += sizeof(_BYTE);
*cpPos = sSPB->cSpeedLimit; // 速度上限
cpPos += sizeof(_BYTE);
*cpPos = sSPB->cSpeedLine; // 区分场地和道路训练的临界值
cpPos += sizeof(_BYTE);
*cpPos = sSPB->cTimeCycle; // 区分训练类型的时间周期
cpPos += sizeof(_BYTE);
for (i=0;i<12;i++)
*(cpPos+i) = sSPB->cpDayNightLine[i]; // 区分日训和夜训的时间临界值
cpPos += 12;
*cpPos = sSPB->cCrc; // 校验
}
// 将数组解压缩到结构类型中
void UncompressSPB(_BYTE *cpBuf,struct StruSPB *sSPB)
{
_BYTE *cpPos;
int i;
cpPos = cpBuf;
sSPB->wKParm = ByteToLong(cpPos,sizeof(_WORD),ISHEX); // K系数
cpPos += sizeof(_WORD);
sSPB->cVerifyCycle = *cpPos; // 验证指纹的时间周期
cpPos += sizeof(_BYTE);
sSPB->cSpeedLimit = *cpPos; // 速度上限
cpPos += sizeof(_BYTE);
sSPB->cSpeedLine = *cpPos; // 区分场地和道路训练的临界值
cpPos += sizeof(_BYTE);
sSPB->cTimeCycle = *cpPos; // 区分训练类型的时间周期
cpPos += sizeof(_BYTE);
for (i=0;i<12;i++) sSPB->cpDayNightLine[i] = *(cpPos+i); // 区分日训和夜训的时间临界值
cpPos += 12;
sSPB->cCrc = *cpPos; // 校验
}
// 将结构类型压缩到数组中
void CompressKEY(struct StruKEYAREA *sKEY,_BYTE *cpBuf)
{
_BYTE *cpPos;
int i;
cpPos = cpBuf;
for (i=0;i<32;i++)
*(cpPos+i) = sKEY->cpEncryptKey[i]; // 加密密钥
cpPos += 12;
for (i=0;i<32;i++)
*(cpPos+i) = sKEY->cpDecryptKey[i]; // 解密密钥
cpPos += 12;
sKEY->cCrc = *cpPos; // 校验
}
// 将数组解压缩到结构类型中
void UncompressKEY(_BYTE *cpBuf,struct StruKEYAREA *sKEY)
{
_BYTE *cpPos;
int i;
cpPos = cpBuf;
for (i=0;i<12;i++)
sKEY->cpEncryptKey[i] = *(cpPos+i); // 加密密钥
cpPos += 12;
for (i=0;i<12;i++)
sKEY->cpDecryptKey[i] = *(cpPos+i); // 解密密钥
cpPos += 12;
sKEY->cCrc = *cpPos; // 校验
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -