📄 demo.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 + -