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

📄 berencoder.cpp

📁 Mysql的处理
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	/*	char ww[40];		_snprintf(ww,40,"%d", nIn);		CBigInt::Encode(ww, pBodyString, nBodyLength);	*/				writeStream(pBodyString, nBodyLength);		encodeLength(nBodyLength);		if(tag != NULL)			writeStream(tag, tagLen);		else			encodeTag(CASN1Tag::TAG_INTEGER, false);		int end = m_nPos;		nOutLength = end - start;		return true;	}		bool CBEREncoder::encodeOctetString(const char *szIn, int nLength, int &nOutLength, char *tag, int tagLen)	{		int start = m_nPos;		writeStream(szIn, nLength);		encodeLength(nLength);		if(tag != NULL)			writeStream(tag, tagLen);		else			encodeTag(CASN1Tag::TAG_OCTET_STRING, false);		int end = m_nPos;		nOutLength = end - start;		return true;	}			bool CBEREncoder::encodeObjectId(const int* iIn, int nCount, int &nOutLength)	{		int start = m_nPos;		        char * pBodyString = NULL;		int nBodyLength;		//  Add by xxh 2006.4.26		nBodyLength=nCount;		//   end Add        writeStream(pBodyString, nBodyLength);        encodeLength(nBodyLength);		encodeTag(CASN1Tag::TAG_OBJECT_IDENTIFIER, false);		int end = m_nPos;		nOutLength = end - start;		return true;	}		bool CBEREncoder::encodeReal(double dIn, int &nOutLength, char *tag, int tagLen)	{		int start = m_nPos;		int temp=0,comma,addlength,p=0,sign1=0,sign2=0,s=0,epos;		int m=0,jj=0;		char str[15],*part1,*part2;		char realstring[50];		char *sstr,*mstr;		int length1,length2,nBodyLength;		char enMassita[20],enExponent[20];		if(dIn<0) sign1=-1;		else sign1=1;		sprintf(str,"%e",dIn);		for(int i=0;str[i]!='\0';i++){			if (str[i]=='E'||str[i]=='e')			{temp=i;break;}		}		epos=temp;		for(int w=temp-1;w>1;w--)			if (str[w]=='0') temp--;			else break;												part1 =new char[temp];			for(int n=0;n<temp;n++)			{				if ((str[n]<'0'||str[n]>'9')) continue;				part1[jj]=str[n];				//	if (str[n]=='.'||n!=0) {n=n+1;continue;}				m=m*10+part1[jj]-48;				jj++;			}			part1[temp]='\0';									for(int j=0;str[j]!='.';j++)			{				comma=j+1;			}												addlength=temp-comma-1;			part2 =new char[strlen(str)-temp];			for(int k=epos+1;str[k]!='\0'&&str[k]!=' ';k++)			{				part2[p++]=str[k];			}			part2[p]='\0';			if (part2[0]=='-')sign2=-1;			else			{				sign2=1;			}			for(int h=1;h<p;h++)			{				s=s*10+part2[h]-48;			}									s=s*sign2-addlength;			mstr= new char[1000];			sstr=new char[1000];			if (enInteger(m,mstr)==0) return 0;			if (enInteger(s,sstr)==0) return 0;			length1=strlen(mstr);			length2=strlen(sstr);			nBodyLength=length1+length2+2;			if (sign1=-1)				sprintf(realstring,"%c%c%s%s",'3',length2,sstr,mstr);			else				sprintf(realstring,"%c%c%s%s",'s',length2,sstr,mstr);			//		encodeLength(nLength);			writeStream(realstring, nBodyLength);			encodeLength(nBodyLength);			if(tag != NULL)				writeStream(tag, tagLen);			else				encodeTag(CASN1Tag::TAG_REAL, false);			int end = m_nPos;			nOutLength = end - start;						//			//			//			//			delete []sstr;			delete []mstr;						return true;	}		bool CBEREncoder::encodeEnum(int nIn, int &nOutLength)	{		int start = m_nPos;		int t,s;		int nBodyLength,nLength;		int j=0;//,l;		// uInt;		char strtemp[20];		char str[20];		char pBodyString[8];						sprintf(strtemp,"%x\0",nIn);		strcpy(str,strtemp);		if((strlen(strtemp)%2)==1)			sprintf(str,"%d%s",0,strtemp);//sprintf(str,"%d%s\0",0,strtemp);				//nBodyLength=strlen(str);		//pBodyString =new char[strlen(str)/2];		if(nIn>=0)		{			pBodyString[j++]=0;		}				for(int k=0;k<strlen(str);k+=2){			//	cout<<"\nstr["<<k<<"]:"<<str[k]<<"   str["<<k+1<<"]:"<<str[k+1]<<endl;			if((str[k]>='A')&&(str[k]<='F'))				t=str[k]-57;			else if((str[k]>='a')&&(str[k]<='f'))				t=str[k]-87;			else if ((str[k]>='0')&&(str[k]<='9'))				t=str[k]-48;			else 				continue;						if((str[k+1]>='A')&&(str[k+1]<='F'))				s=str[k+1]-57;			else if((str[k+1]>='a')&&(str[k+1]<='f'))				s=str[k+1]-87;			else if((str[k+1]>='0')&&(str[k+1]<='9'))				s=str[k+1]-48;			else				continue;			pBodyString[j++]=t*16+s;					};		//		pBodyString[j+1]='\0';		nBodyLength=j;				writeStream(pBodyString, nBodyLength);		encodeLength(nBodyLength);		encodeTag(CASN1Tag::TAG_ENUMERATED, false);		//delete []pBodyString;		int end = m_nPos;		nOutLength = end - start;		return true;	}		bool CBEREncoder::encodeUTF8String(const char* szIn, int nLength, int &nOutLength)	{		start();		return true;	}			bool CBEREncoder::encodeIpAddress(const char* szIn, int &nOutLength, char *tag, int tagLen)	{		int nBodyLength,nLength; 		nBodyLength=nLength=4;		char szIpAddress[4];						int nLen = strlen(szIn);				if(szIn == NULL || strlen(szIn) <= 0)			return false;				char *szIn2=(char*)szIn;		int p = 0;				for(int i=0;i<nLen;i++)		{			if(szIn[i] == '.')			{				szIpAddress[p++] = atoi(szIn2);				szIn2 = (char*)&szIn[i+1];								if(p == 3)				{					szIpAddress[p++] = atoi(szIn2);					break;				}			}		}						int start = m_nPos;		writeStream(szIpAddress, nBodyLength);		encodeLength(nLength);		if(tag != NULL)			writeStream(tag, tagLen);		else			encodeTag(CASN1Tag::TAG_NUMERICSTRING, false);		int end = m_nPos;		nOutLength = end - start;		return true;	}		bool CBEREncoder::encodeNumericString(const char* szIn, int &nOutLength, char *tag, int tagLen)	{		int nBodyLength,nLength;//=strlen(szIn); 		nBodyLength=nLength=strlen(szIn);		//pBodyString =new char[j];		//for(int i=0;i<j;i++)		//pBodyString[i]=str2[i];				int start = m_nPos;		writeStream(szIn, nBodyLength);		encodeLength(nLength);		if(tag != NULL)			writeStream(tag, tagLen);		else			encodeTag(CASN1Tag::TAG_NUMERICSTRING, false);		int end = m_nPos;		nOutLength = end - start;		return true;	}		bool CBEREncoder::encodePrintableString(const char* szIn, int &nOutLength)	{		start();		return true;	}		bool CBEREncoder::encodeT61String(const char* szIn, int &nOutLength)	{		start();		return true;	}		bool CBEREncoder::encodeVideotexString(const char* szIn, int &nOutLength)	{		start();		return true;	}		bool CBEREncoder::encodeIA5String(const char* szIn, int &nOutLength)	{		start();		return true;	}		bool CBEREncoder::encodeUTCTime(const char* szIn, int &nOutLength, char *tag, int tagLen)	{	/*		char pBodyString[9],j=0;	int nBodyLength,nLength;		  for(int i=0;i<12;i+=2)	  {	  pBodyString[j]=(szIn[i]-48)*16+(szIn[i+1]-48);	  j=j+1;	  }	  pBodyString[6]='+';	  pBodyString[7]=0;	  pBodyString[8]=0;	  nBodyLength=nLength=9;		*/				char pBodyString[9],j=0;		int nBodyLength,nLength;				for(int i=0;i<12;i+=2)		{			pBodyString[j]=(szIn[i]-48)*16+(szIn[i+1]-48);			j=j+1;		}		pBodyString[6]='+';		pBodyString[7]=0;		pBodyString[8]=0;		nBodyLength=nLength=9;				int start = m_nPos;		writeStream(pBodyString, nBodyLength);		encodeLength(nLength);		if(tag != NULL)			writeStream(tag, tagLen);		else			encodeTag(CASN1Tag::TAG_UTCTIME, false);		int end = m_nPos;		nOutLength = end - start;		return true;	}		bool CBEREncoder::encodeGeneralizedTime(const char* szIn, int &nOutLength)	{	/*	char pBodyString[15];	int nBodyLength,nLength;	for(int i=0;i<14;i++)	pBodyString[i]=szIn[i];	pBodyString[14]='Z';	nBodyLength=nLength=15;		  		*/		char pBodyString[10],j=0;		int nBodyLength,nLength;		for(int i=0;i<14;i+=2)		{			pBodyString[j]=(szIn[i]-48)*16+szIn[i+1]-48;			j++;		}		pBodyString[7]='+';		pBodyString[8]=0;		pBodyString[9]=0;		nBodyLength=nLength=10;				int start = m_nPos;		writeStream(pBodyString, nBodyLength);		encodeLength(nLength);		encodeTag(CASN1Tag::TAG_GENERALIZEDTIME, false);		int end = m_nPos;		nOutLength = end - start;		return true;	}		bool CBEREncoder::encodeGraphicString(const char* szIn, int &nOutLength)	{		start();		return true;	}		bool CBEREncoder::encodeVisibleString(const char* szIn, int &nOutLength)	{		start();		return true;	}		bool CBEREncoder::encodeGeneralString(const char* szIn, int &nOutLength)	{		start();		return true;	}		bool CBEREncoder::encodeUniversalString(const char* szIn, int &nOutLength)	{		start();		return true;	}		bool CBEREncoder::encodeBMPString(const char* szIn, int &nOutLength)	{		start();		return true;	}		bool CBEREncoder::encodeStructure(const char* szIn, int nLength, int &nOutLength)	{		start();		return true;	}	bool CBEREncoder::enInteger(int nIn,char *&out)	{		int t,s;		int nBodyLength,nLength;		int j=0;//,l;		// uInt;		char strtemp[20];		char str[20];		char *pBodyString;				sprintf(strtemp,"%x\0",nIn);		strcpy(str,strtemp);		if((strlen(strtemp)%2)==1)			sprintf(str,"%d%s",0,strtemp);//sprintf(str,"%d%s\0",0,strtemp);				nBodyLength=strlen(str)+1;		pBodyString =new char[nBodyLength];						for(int k=0;k<strlen(str);k+=2){			if((str[k]>='A')&&(str[k]<='F'))				t=str[k]-57;			else if((str[k]>='a')&&(str[k]<='f'))				t=str[k]-87;			else if ((str[k+1]>='0')&&(str[k+1]<='9'))				t=str[k]-48;			else 				continue;						if((str[k+1]>='A')&&(str[k+1]<='F'))				s=str[k+1]-57;			else if((str[k+1]>='a')&&(str[k+1]<='f'))				s=str[k+1]-87;			else if((str[k+1]>='0')&&(str[k+1]<='9'))				s=str[k+1]-48;			else				continue;			pBodyString[j++]=t*16+s;					};		//		pBodyString[j+1]='\0';		//nBodyLength=nLength=j;		//nBodyLength=nLength=j;		memcpy(out,pBodyString,j);		delete []pBodyString;		return true;	}	}

⌨️ 快捷键说明

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