⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compress.c

📁 AT91fr40162的FLASH读写程序
💻 C
📖 第 1 页 / 共 2 页
字号:
   	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 + -