📄 stocktel.cpp
字号:
#include "stockTel.h"#include <fstream>using namespace std;ZTel::ZTel(ZTel* tel){ body=NULL; this->length=0; this->setLength(tel->getLength()); for (int i=0;i<length;i++) { this->body[i]=*(tel->getBody()+i); }}ZTel::ZTel(int length,unsigned int command){// ZTel(); body=NULL; this->length=0; Head[0]=0xfd;Head[1]=0xfd;Head[2]=0xfd;Head[3]=0xfd; setLength(length);// body[0]= *((char*)((unsigned char*)&command)); if(length<4)return; *((unsigned int* )body)=command;}ZTel::ZTel(int length){// ZTel(); body=NULL; this->length=0; Head[0]=0xfd;Head[1]=0xfd;Head[2]=0xfd;Head[3]=0xfd; setLength(length);}void ZTel::setLength(int length){ if(this->length!=0) { delete[](body); body=NULL; } this->length=length; if(length==0)return; stringstream ss; ss.width(8); ss.fill('0'); ss <<hex <<length; ss >> &(Head[4]); Head[12]=0; body=new char[length]; for (int i=0;i<length;i++)body[i]=0;}ZTel::ZTel(){ body=NULL; this->length=0;} ZTel::~ZTel(){ if(body!=NULL)delete[](body);} char* ZTel::getBody(){ return(body);}int ZTel::getLength(){ return(length);}char* ZTel::getHead(){ return(Head);}unsigned int ZTel::getCommand(){ if(body==NULL)return(0xffffffff); return(*((unsigned int*)(&body[0])));}void ZTel::setCommand(unsigned int c){ if(body==NULL)return; *((unsigned int*)getBody())=c; return;}void ZTel::send(QSocket* socket){ if(socket==NULL)return; if(body==NULL)return;// socket->writeBlock(Head,13); // socket->writeBlock(body,length); char* buf=new char[13+length]; for(int i=0;i<13;i++) buf[i]=Head[i]; for(int i=13;i<13+length;i++)buf[i]=body[i-13]; socket->writeBlock(buf,13+length); // socket->flush();}bool ZTel::receive(QSocket* socket){ static int rece=0; int i; for(i=rece;i<13;i++) { if(socket->bytesAvailable()<1)return(false); rece=rece+socket->readBlock(Head+rece,1); if((rece==1)&&(((unsigned char)Head[0])!=0xFD)) { rece=0;return(false); } if((rece<=4)&&(rece>1)&&(((unsigned char)Head[rece-1])!=0xFD)) { for(int j=0;j<rece-1;j++)Head[j]=Head[j+1]; rece=rece-1; return(false); } if((rece>4)&&(!isxdigit(Head[rece-1]))&&(rece<13)) { for(int j=0;j<rece-1;j++)Head[j]=Head[j+1]; rece=rece-1; return(false); } if((rece==13)&&((unsigned char)Head[12]!=0)) { for(int j=0;j<rece-1;j++)Head[j]=Head[j+1]; rece=rece-1; return(false); } } if(rece==13) { int l; stringstream ss; ss<< &Head[4]; if(ss >> hex >>l )setLength(l); } for(i=rece-13;i<length;i++) { if(socket->bytesAvailable()<1)return(false); rece=rece+socket->readBlock(body+rece-13,1); } rece=0; return(true); } string ZTel::printTel(){ string s,t; int i; for (i=0;i<13;i++) { unsigned int j= *((unsigned char*)&(Head[i])); stringstream ss; ss.width(2); ss.fill('0'); ss<< hex <<j; ss >> t; s=s+" "+t; } for (i=0;i<length;i++) { unsigned int j= *((unsigned char*)&(body[i])); stringstream ss; ss.width(2); ss.fill('0'); ss<< hex <<j; ss >> t; s=s+" "+t; } return(s);}void ZTel::writeToFile(string FileName){ ofstream TelOut(FileName.c_str()); TelOut.write(getHead(),13); TelOut.write(getBody(),getLength()); TelOut.close(); } ZLoginTel::ZLoginTel(string name,string pass):ZTel(0x80,0x0a){ unsigned short ln=name.size(); unsigned short lp=pass.size(); *((unsigned short *)(&body[1]))=ln; stringstream ss; ss<<name; ss>>&(body[3]); *((unsigned short *)(&(body[3+ln])))=lp; stringstream ss1; ss1<<pass; ss1>>((unsigned char*)(&(body[5+ln])));}string ZLoginBackTel::getMessage(){ if(length<3)return(string("")); return(string(&body[1]));}string ZBBTel::getText(){ return(string(&body[0x20]));}ZGetCodeTel:: ZGetCodeTel():ZTel(0x80,0x00000121){ body[4]=06; string s="E013.56D013.04D022.08D043.35D063.74"; stringstream ss; ss<<s; ss>>&body[13]; } ZCodeTel::ZCodeTel(ZCodeTel* tel):ZTel((ZTel*) tel){}ZNameCode* ZCodeTel::findByCode(string code){ for(int i=0;i<getRecords();i++) { if(code==getRecord(i)->getCode()) return(getRecord(i)); } return(NULL);}ZNameCode* ZCodeTel::getCodeData(){ if(length==0)return(NULL); return((ZNameCode*)(body+0x01c8)); }int ZCodeTel::getRecords(){ if(length==0)return(0); return((length-0x01C8)/sizeof(ZNameCode));}ZNameCode* ZCodeTel::getRecord(int index){ if(index>getRecords())return(NULL); return(getCodeData()+index);}ZNameCode* ZCodeTel::findNearBy(string s){ if((s[0]<='9') && (s[0]>='0')) //is digist() { for(int i=0;i<getRecords();i++) { string ts=(getCodeData()+i)->getCode(); if(ts.find (s,0)==0)return(getRecord(i)); } } else { for(int i=0;i<getRecords();i++) { string ts=(getCodeData()+i)->getPinYin(); if(ts.find (s,0)==0)return(getRecord(i)); } } return(NULL);}string ZNameCode::getName(){ string re(8,' '); for(int i=0;i<8;i++)re[i]=Name[i]; return(re);}string ZNameCode::getCode(){ string re(6,' '); for(int i=0;i<6;i++)re[i]=Code[i]; return(re);}string ZNameCode::getPinYin(){ string re(4,' '); for(int i=0;i<4;i++)re[i]=PinYin[i]; return(re);}unsigned char ZNameCode::getStyle(){ return(style);}ZNameCodeTable::ZNameCodeTable(int records,ZNameCode* data){ this->records=records; this->data=new ZNameCode[records];// cerr<<records<<endl; unsigned char *a,*b; a=(unsigned char* )this->data; b=(unsigned char*) data; for(unsigned int i=0;i<records*sizeof(ZNameCode);i++) { *a=*b; a++;b++; } }int ZNameCodeTable::findByCode(string code){ for(int i=0;i<records;i++) { if((data+i)->getCode()==code) { return(i); } } return(0);}int ZNameCodeTable::findNearBy(string s){ if((s[0]<='9') && (s[0]>='0')) //is digist() { for(int i=0;i<records;i++) { string ts=(data+i)->getCode(); if(ts.find (s,0)==0)return(i); } } else { for(int i=0;i<records;i++) { string ts=(data+i)->getPinYin(); if(ts.find (s,0)==0)return(i); } } return(0);}unsigned char ZNameCodeTable::getStyleByCode(string code){ int i=findByCode(code); return((data+i)->getStyle());}string ZNameCodeTable::getNameByCode(string code){ int i=findByCode(code); return((data+i)->getName());}ZGetDaysTel::ZGetDaysTel(string Code,unsigned char style):ZTel(0x80){ for(int i=0;i<6;i++) { body[i+7]=Code[i]; } if((style==0x10)||(style==0x20)) { setCommand(0x00030920); } else { setCommand(0x00020920); } body[4]=0x18; //起始记录 body[5]=0xff; //结束记录 body[6]=style; }ZGetMinutesTel::ZGetMinutesTel(string code,unsigned char style) :ZTel(0x80,0x00010600) //0x00010401){ for(int i=0;i<6;i++) { body[i+7]=code[i]; } body[4]=0x01; body[5]=0x00; body[6]=style;}ZGetMinutesTel::ZGetMinutesTel(ZNameCode* currentStock):ZTel(0x80){ switch(currentStock->getStyle()) { case 0x10: case 0x20: setCommand(0x00010600); break; default: setCommand(0x00010401); } string code=currentStock->getCode(); for(int i=0;i<6;i++) { body[i+7]=code[i]; } body[4]=0x01; body[5]=0x00; body[6]=currentStock->getStyle();}int ZDaysTel::getDays(){ if(length==0)return(0); if(isIndexDaysTel())return(*((unsigned short int*)(&body[0x6E]))); else if(isStockDaysTel())return(*((unsigned short int*)(&body[0x156]))); else return(0);}ZDaysStruct* ZDaysTel::getDay(int i){ if(length==0)return(NULL); if(isIndexDaysTel()) return(((ZDaysStruct*)(&body[0x070]))+i); else if(isStockDaysTel()) return(((ZDaysStruct*)(&body[0x08E0]))+i); else return(NULL);}ZMinutesStruct* ZDaysTel::getMinute(int i){ if(length==0)return(NULL); return(((ZMinutesStruct*)(&body[0x158]))+i); }int ZDaysTel::getMinutes(){ if(length==0)return(0); // return(0xEF); return(*((unsigned short int*)(&body[0x154])));}int ZMinutesTel::getMinutes(){ int l=getLength(); if(isStockMinutesTel()) return((l-0x160)/8); if(isIndexMinutesTel()) return (*((unsigned short int*)&body[0x6E])); return(0);}ZMinutesStruct* ZMinutesTel::getMinute(int i){ if(isStockMinutesTel()) return(((ZMinutesStruct*)( &body[0x160]))+i); if(isIndexMinutesTel()) return((ZMinutesStruct*)(&body[0x070])+i); return(NULL);}ZGetOldMinutesTel::ZGetOldMinutesTel(string code,unsigned char style,unsigned int date) :ZTel(0x80,0x00030f00){ for(int i=0;i<6;i++) { body[i+7]=code[i]; } *((unsigned int*)(&body[13]))=date; body[4]=0x02; body[5]=0x00; body[6]=style;}int ZOldMinutesTel::getMinutes(){ return (*((unsigned short int*)&body[0x24]));}ZOldMinutesStruct* ZOldMinutesTel::getMinute(int i){ return(((ZOldMinutesStruct*)( &body[0x26]))+i); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -