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

📄 demo.c

📁 用于小商品消费的SMS消费机程序
💻 C
字号:
typedef struct _ChargeRecord					
{
	unsigned char cTSNo[4];
	unsigned char cSerialNo[4];			
	unsigned char cCityCode[2];
	unsigned char cTradeCode[2];
	unsigned char cCardNo[4];
	unsigned char cCardAuthenCode[4];
	unsigned char cCardType;				
	unsigned char cTotleChargeTimes[2];	
	unsigned char cMoneyOrTimes[4];		
	unsigned char cChargeMoneyOrTimes[3];
	unsigned char cChargeDateTime[7];	
	unsigned char cChargeType;			
	unsigned char cDate[2];				
	unsigned char cTAC[4];				
} sttChargeRecord;

typedef struct _FileChargeRecord
{
	char dsn[8+1];
	char fcn[8+1];
	char icn[16+1];
	char cmac[8+1];
	char ctp[2+1];
	char rn[5+1];
	char bal[8+1];
	char tf[8+1];
	char pid[8+1];
	char tim[14+1];
	char tt[2+1];
	char vc[2+1];
	char tac[8+2];
} sttFileChargeRecord;
inline unsigned long AsciString2DWord(unsigned char *cAsciString)
{
	unsigned long lRet;
	lRet = ((unsigned long)cAsciString[0]<<24) + 
	       ((unsigned long)cAsciString[1]<<16) +
	       ((unsigned long)cAsciString[2]<< 8) +
	       ((unsigned long)cAsciString[3]    );		
	return lRet;
}

inline unsigned short AsciString2Word(unsigned char *cAsciString)
{
	unsigned short sRet;
	sRet = ((unsigned short)cAsciString[0]<< 8) +
	       ((unsigned short)cAsciString[1]    );		
	return sRet;
}

inline unsigned long AsciString2DWord1(unsigned char *cAsciString)
{
	unsigned long lRet;
	lRet = ((unsigned long)cAsciString[3]<<24) + 
	       ((unsigned long)cAsciString[2]<<16) +
	       ((unsigned long)cAsciString[1]<< 8) +
	       ((unsigned long)cAsciString[0]    );		
	return lRet;
}

inline unsigned short AsciString2Word1(unsigned char *cAsciString)
{
	unsigned short sRet;
	sRet = ((unsigned short)cAsciString[1]<< 8) +
	       ((unsigned short)cAsciString[0]    );		
	return sRet;
}
void procRecData(unsigned char *inBuf, FILE * pfile)
{
	sttPacketHead *pph;
	sttChargeRecord *psCR;
	char dStr[9];
	unsigned char *ptr, *ptr2;
	sttFileChargeRecord stfcr;
	int RecNum, i;
	unsigned char cPsamNo[4];
	
	RecNum = *inBuf;
	memcpy(cPsamNo, inBuf+1, 4);
	ptr = inBuf+5;
	
	for(i=0;i<RecNum;i++)
	{
		char tempStr[20];
		psCR = (sttChargeRecord *)(ptr+i*sizeof(sttChargeRecord));
		
		//脱机交易流水号dsn[8+1]
		sprintf( tempStr,"%08ld\t",AsciString2DWord1(psCR->cTSNo));
		memcpy( (void *)stfcr.dsn, (void *)tempStr, 9);
		//票卡物理卡号fcn[8+1]
		sprintf( tempStr,"%08x\t",AsciString2DWord(psCR->cSerialNo) );
		memcpy( (void *)stfcr.fcn, (void *)tempStr, 9);
		//票卡号icn[16+1]
		sprintf( tempStr,"%02x%02x%02x%02x%08x\t",psCR->cCityCode[0],psCR->cCityCode[1],
		                                         psCR->cTradeCode[0],psCR->cTradeCode[1],
		                                         AsciString2DWord(psCR->cCardNo) );
		memcpy( (void *)stfcr.icn, (void *)tempStr, 17);
		//卡认证码cmac[8+1]
		sprintf( tempStr,"%08x\t",AsciString2DWord(psCR->cCardAuthenCode));
		memcpy( (void *)stfcr.cmac, (void *)tempStr, 9);
		//卡类ctp[2+1]
		sprintf( tempStr,"%02x\t",psCR->cCardType);
		memcpy( (void *)stfcr.ctp, (void *)tempStr, 3);
		//票卡交易计数rn[5+1]
		sprintf( tempStr,"%05d\t",AsciString2Word1(psCR->cTotleChargeTimes));
		memcpy( (void *)stfcr.rn, (void *)tempStr, 6);
		//原额bal[8+1]
		sprintf( tempStr,"%7.2f\t",AsciString2Word1(psCR->cChargeMoneyOrTimes)/100.00);
		memcpy( (void *)stfcr.bal, (void *)tempStr, 9);
		//交易金额tf[8+1]
		sprintf( tempStr,"%7.2f\t",AsciString2DWord1(psCR->cMoneyOrTimes)/100.00);
		memcpy( (void *)stfcr.tf, (void *)tempStr, 9);
		//本次交易设备编号pid[8+1]
		sprintf( tempStr,"%08ld\t",AsciString2DWord1(psCR->cPsamNo));
		memcpy( (void *)stfcr.pid, (void *)tempStr, 9);
		//本次交易日期时间tim[14+1]
		sprintf( tempStr,"%02x%02x%02x%02x%02x%02x%02x\t",psCR->cChargeDateTime[0],
		                                                  psCR->cChargeDateTime[1],
		                                                  psCR->cChargeDateTime[2],
		                                                  psCR->cChargeDateTime[3],
		                                                  psCR->cChargeDateTime[4],
		                                                  psCR->cChargeDateTime[5],
		                                                  psCR->cChargeDateTime[6]);
		memcpy( (void *)stfcr.tim, (void *)tempStr, 15);
		//交易类型tt[2+1]
		sprintf( tempStr,"%02x\t",psCR->cChargeType);
		memcpy( (void *)stfcr.tt, (void *)tempStr, 3);
		//校验码vc[2+1]
		sprintf( tempStr,"%02x\t",XOR_calc( (unsigned char *)&stfcr, sizeof(stfcr)-13 )  );
		memcpy( (void *)stfcr.vc, (void *)tempStr, 3);
		//交易认证码tac[8+2]
		sprintf( tempStr, "%08x\r\n", AsciString2DWord(psCR->cTAC));
		memcpy( (void *)stfcr.tac, (void *)tempStr, 10);
		fwrite( (void *)&stfcr,1,sizeof(stfcr),fp);
	}	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -