?? 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);
//票卡交易計數(shù)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 + -