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

📄 wpackage.cpp

📁 模拟手机源程序,做短信系统(源码)
💻 CPP
字号:
//#include <string.h>
//#include <stdlib.h>
//#include <stdio.h>
#include "stdafx.h"
#include "wPackage.h"



#define min(a, b)  (((a) < (b)) ? (a) : (b)) 
#define max(a, b)  (((a) > (b)) ? (a) : (b)) 

void CPackage::Encode(char* szBuf)
{
	char buf[BUFFERSIZE+1];
	int i, j;

	for(i=0, j=0; i<(int)strlen(szBuf); i++)   {
		switch(szBuf[i])   {
		case ' ':
			buf[j] = '^';j++;
			buf[j] = 's';j++;
			break;
		case '^':
			buf[j] = '^';j++;
			buf[j] = '^';j++;
			break;
		case '\r':
			buf[j] = '^';j++;
			buf[j] = 'r';j++;
			break;
		case '\n':
			buf[j] = '^';j++;
			buf[j] = 'n';j++;
			break;
		case '$':
			buf[j] = '^';j++;
			buf[j] = 'c';j++;
			break;
		case '#':
			buf[j] = '^';j++;
			buf[j] = 'j';j++;
			break;
		case '*':
			buf[j] = '^';j++;
			buf[j] = 'x';j++;
			break;
		case '\t':
			buf[j] = '^';j++;
			buf[j] = 't';j++;
			break;
		case '&':
			buf[j] = '^';j++;
			buf[j] = 'e';j++;
			break;
		default:
			buf[j] = szBuf[i];j++;
			break;
		}
	}
	buf[j] = '\0';
	strcpy(szBuf, buf);
}

void CPackage::Decode(char* szBuf)
{
	char buf[BUFFERSIZE+1];
	int i, j;
	BOOL bEsc = FALSE;

	for(i=0, j=0; i<(int)strlen(szBuf); i++)   {
		if(szBuf[i] == '^')   {
			bEsc = TRUE;
			i++;
		}
		if(bEsc)   {
			switch(szBuf[i])   {
			case 's':
				buf[j] = ' ';j++;
				break;
			case '^':
				buf[j] = '^';j++;
				break;
			case 'r':
				buf[j] = '\r';j++;
				break;
			case 'n':
				buf[j] = '\n';j++;
				break;
			case 'c':
				buf[j] = '$';j++;
				break;
			case 'j':
				buf[j] = '#';j++;
				break;
			case 'x':
				buf[j] = '*';j++;
				break;
			case 't':
				buf[j] = '\t';j++;
				break;
			case 'e':
				buf[j] = '&';j++;
				break;
			}
			bEsc = FALSE;
		}
		else   {
			buf[j] = szBuf[i]; j++;
		}
	}
	buf[j] = '\0';
	strcpy(szBuf, buf);
}

void CPackage::PushInt(char* szBuf, long lValue)
{
	char szTemp[20];
	char szDeli[10];
	
	szDeli[0] = m_cDeli;
	szDeli[1] = '\0';

	_ltoa(lValue, szTemp, 10);
	Encode(szTemp);
	strcat(szBuf, szDeli);
	strcat(szBuf, szTemp);
}

void CPackage::PushChar(char* szBuf, char cC)
{
	char szTemp[10];
	char szDeli[10];
	
	szDeli[0] = m_cDeli;
	szDeli[1] = '\0';

	szTemp[0] = cC;
	szTemp[1] = '\0';
	Encode(szTemp);
	strcat(szBuf, szDeli);
	strcat(szBuf, szTemp);
} 
void CPackage::PushStr(char* szBuf, char* szStr)
{
	char szTemp[BUFFERSIZE];
	char szDeli[10];
	
	szDeli[0] = m_cDeli;
	szDeli[1] = '\0';

	if(szStr[0] == '\0')   strcpy(szStr, "null");
	strcpy(szTemp, szStr);
	Encode(szTemp);
	strcat(szBuf, szDeli);
	strcat(szBuf, szTemp);
}

void CPackage::PushFloat(char* szBuf, double dValue)
{
	char szTemp[BUFFERSIZE];
	char szDeli[10];
	
	szDeli[0] = m_cDeli;
	szDeli[1] = '\0';

	::sprintf(szTemp, "%.2lf", dValue);
	//_gcvt(dValue, 3, szTemp);
	Encode(szTemp);
	strcat(szBuf, szDeli);
	strcat(szBuf, szTemp);
}

int CPackage::PullInt(char* szBuf, long* lValue)
{
	char szTemp[21];
	int i;
	BOOL bFinish;		// Check has reach the tail of the package

	i = FindDeli(szBuf, &bFinish);
	if(i == 0)   {
		*lValue = 0;
		return NODATA;
	}
	if(i > 20)   i = 20;
	StrnCpy(szTemp, szBuf, i);
	Decode(szTemp);
	if(stricmp(szTemp, "null") == 0)   *lValue = 0;
	else   *lValue = atol(szTemp);
	StrPack(szBuf, i);
	return i;
}

int CPackage::PullChar(char* szBuf, char* cC)
{
	char szTemp[20];
	int i;
	BOOL bFinish;

	i = FindDeli(szBuf, &bFinish);
	if(i == 0)   {
		*cC = 0;
		return NODATA;
	}
	StrnCpy(szTemp, szBuf, i);
	if(stricmp(szTemp, "null") == 0)   *cC = ' ';
	else   *cC = szTemp[0];
	StrPack(szBuf, i);
	return i;
}

int CPackage::PullStr(char* szBuf, char* szStr, int nBufferSize)
{
	char szTemp[BUFFERSIZE];
	int i;
	BOOL bFinish;		// Check has reach the tail of the package

	TrimNewLine(szBuf);
	Trim(szBuf);
	i = FindDeli(szBuf, &bFinish);
	if(i == 0)   {
		strcpy(szStr, "");
		return NODATA;
	}
	StrnCpy(szTemp, szBuf, i);
	Decode(szTemp);
	if(stricmp(szTemp, "null") == 0)   strcpy(szStr, "");
	else   StrnCpy(szStr, szTemp, min(i, nBufferSize));
	StrPack(szBuf, i);
	return i;
}

int CPackage::PullFloat(char* szBuf, double* lValue)
{
	char szTemp[30];
	int i;
	BOOL bFinish;		// Check has reach the tail of the package

	i = FindDeli(szBuf, &bFinish);
	if(i == 0)   {
		*lValue = 0;
		return NODATA;
	}
	StrnCpy(szTemp, szBuf, i);
	Decode(szTemp);
	if(stricmp(szTemp, "null") == 0)   *lValue = 0;
	else   *lValue = atof(szTemp);
	StrPack(szBuf, i);
	return i;
}

//-----------------------------------------------------------
void CPackage::PushInt(char* szBuf, long lValue, char cDeli)
{
	char szTemp[20];
	char szDeli[10];
	
	szDeli[0] = cDeli;
	szDeli[1] = '\0';

	_ltoa(lValue, szTemp, 10);
	Encode(szTemp);
	strcat(szBuf, szDeli);
	strcat(szBuf, szTemp);
}

void CPackage::PushChar(char* szBuf, char cC, char cDeli)
{
	char szTemp[10];
	char szDeli[10];
	
	szDeli[0] = cDeli;
	szDeli[1] = '\0';

	szTemp[0] = cC;
	szTemp[1] = '\0';
	Encode(szTemp);
	strcat(szBuf, szDeli);
	strcat(szBuf, szTemp);
}

void CPackage::PushStr(char* szBuf, char* szStr, char cDeli)
{
	char szTemp[BUFFERSIZE];
	char szDeli[10];
	
	szDeli[0] = cDeli;
	szDeli[1] = '\0';

	if(szStr[0] == '\0')   strcpy(szStr, "null");
	strcpy(szTemp, szStr);
	Encode(szTemp);
	strcat(szBuf, szDeli);
	strcat(szBuf, szTemp);
}

void CPackage::PushFloat(char* szBuf, double dValue, char cDeli)
{
	char szTemp[BUFFERSIZE];
	char szDeli[10];
	
	szDeli[0] = cDeli;
	szDeli[1] = '\0';

	::sprintf(szTemp, "%.2lf", dValue);
	//_gcvt(dValue, 3, szTemp);
	Encode(szTemp);
	strcat(szBuf, szDeli);
	strcat(szBuf, szTemp);
}

int CPackage::PullInt(char* szBuf, long* lValue, char cDeli)
{
	char szTemp[21];
	int i;
	BOOL bFinish;		// Check has reach the tail of the package

	i = FindDeli(szBuf, &bFinish, cDeli);
	if(i == 0)   {
		*lValue = 0;
		return NODATA;
	}
	if(i > 20)   i = 20;
	StrnCpy(szTemp, szBuf, i);
	Decode(szTemp);
	if(stricmp(szTemp, "null") == 0)   *lValue = 0;
	else   *lValue = atol(szTemp);
	StrPack(szBuf, i);
	return i;
}

int CPackage::PullChar(char* szBuf, char* cC, char cDeli)
{
	char szTemp[20];
	int i;
	BOOL bFinish;

	i = FindDeli(szBuf, &bFinish, cDeli);
	if(i == 0)   {
		*cC = 0;
		return NODATA;
	}
	StrnCpy(szTemp, szBuf, i);
	if(stricmp(szTemp, "null") == 0)   *cC = ' ';
	else   *cC = szTemp[0];
	StrPack(szBuf, i);
	return i;
}

int CPackage::PullStr(char* szBuf, char* szStr, int nBufferSize, char cDeli)
{
	char szTemp[BUFFERSIZE];
	int i;
	BOOL bFinish;		// Check has reach the tail of the package

	TrimNewLine(szBuf);
	Trim(szBuf);
	i = FindDeli(szBuf, &bFinish, cDeli);
	if(i == 0)   {
		strcpy(szStr, "");
		return NODATA;
	}
	StrnCpy(szTemp, szBuf, i);
	Decode(szTemp);
	if(stricmp(szTemp, "null") == 0)   strcpy(szStr, "");
	else   StrnCpy(szStr, szTemp, min(i, nBufferSize));
	StrPack(szBuf, i);
	return i;
}

int CPackage::PullFloat(char* szBuf, double* lValue, char cDeli)
{
	char szTemp[30];
	int i;
	BOOL bFinish;		// Check has reach the tail of the package

	i = FindDeli(szBuf, &bFinish, cDeli);
	if(i == 0)   {
		*lValue = 0;
		return NODATA;
	}
	StrnCpy(szTemp, szBuf, i);
	Decode(szTemp);
	if(stricmp(szTemp, "null") == 0)   *lValue = 0;
	else   *lValue = atof(szTemp);
	StrPack(szBuf, i);
	return i;
}
//-----------------------------------------------------------

int CPackage::FindDeli(char* szBuf, int* bFinish, char cDeli)
{
	int i, j;

	*bFinish = FALSE;
	for(j=0; ;j++)   {
		if(szBuf[j] == '\n' || szBuf[j] == '\0')   return 0;
		if(szBuf[j] != cDeli)   {
			if(j != 0)   StrPack(szBuf, j);
			break;
		 }
	 }

	for(i=0 ; ; i++)   {
		if(szBuf[i] == cDeli)   {
			return i;
		 }
		if(szBuf[i] == '\n' || szBuf[i] == '\0')   {
			*bFinish = TRUE;
			return i;
		 }
	 }
 }

int CPackage::FindDeli(char* szBuf, int* bFinish)
{
	return FindDeli(szBuf, bFinish, m_cDeli);
}

char* CPackage::StrnCpy(char* szDest, char* szSour, int nLen)
{
	strncpy(szDest, szSour, nLen);
	szDest[nLen] = '\0';
	return szDest;
 }

void CPackage::StrPack(char* szSour, int nLen)
{
	strcpy(szSour, &szSour[nLen]);
}

int CPackage::PackageEnd(char* szBuff, int* nLen)
{
	int i;

	for(i=0; i<*nLen; i++)   {
		if(szBuff[i] == '\n')   {
			*nLen = i+1;
			szBuff[i+1] = '\0';
			return FINISH;
		}
	}
	szBuff[*nLen+1] = '\0';
	return NOFINISH;
}

int CPackage::FindFinish(char* szBuff, int nLen, int* nPos)
{
	int i;

	for(i=0; i<nLen; i++)   {
		if(szBuff[i] == '\n')   {
			*nPos = i+1;
			return FINISH;
		}
	}
	return NOFINISH;
}

BOOL CPackage::GetPackage(char* szSour, char* szDest)
{
	int nN, nLen;

	nLen = strlen(szSour);
	for(nN=0; nN<nLen; nN++)   {
		if(szSour[nN] == '\n')   {
			StrnCpy(szDest, szSour, nN+1);
			if(nLen == nN+1)   {
				szSour[0] = '\0';
			}
			else   {
				strcpy(szSour, &szSour[nN+1]);
			}
			return TRUE;
		}
	}
	return FALSE;
}

void CPackage::TrimNewLine(char* szStr)
{
	int i;

	for(i=0; i<(int)strlen(szStr); i++)   {
		if(szStr[i] == '\n' || szStr[i] == '\r')   szStr[i] = ' ';
	}
}

void CPackage::InitBuf(char* szBuf)
{
	szBuf[0] = '\0';
}

void CPackage::SetPackageEnd(char* szBuf)
{
	::strcat(szBuf, " \r\n");
}

void CPackage::Trim(char* szStr)
{
	//char* szTemp;
	char szTemp[20480];
	int i, j;			//, lLen;
	BOOL bChar = FALSE;

	//lLen = ::strlen(szStr)+2;
	//szTemp = new char[lLen];

	for(i=::strlen(szStr)-1; i>= 0; i--)   {
		if(szStr[i] == ' ')   szStr[i] = '\0';
		else   break;
	}

	for(i=0, j=0; i<=(int)::strlen(szStr); i++)   {
		if(!bChar && szStr[i] != ' ')   bChar = TRUE;
		if(bChar)   {
			szTemp[j] = szStr[i]; j++;
		}
	}
	::strcpy(szStr, szTemp);

	//delete[] szTemp;
}

⌨️ 快捷键说明

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